Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 14 Next »

 

关于Sakai

发布日期:待定

发布日期

Sakai 10 发布日期

10.0 - 待定

关于Sakai

Sakai是使用Java编写的,服务导向的网络应用程序,支持教学、学档、科研、项目协作等功能。Sakai一般部署在Tomcat集群上,其中每一个Tomcat节点部署一份Sakai。Sakai可以集成多种外部认证系统,包括CAS,Kerberos,LDAP,Shibboleth,WebAuth。Sakai使用MySQL或Oracle作为后台数据库,用户文件一般存放于NAS或SAN上。对于多数生产环境,Sakai需要一个后台学生信息系统(SIS)来提供学生、课程信息,然后Sakai通过API进行调用。

Sakai 10 概览

Sakai 10 概览

Sakai 10 在Sakai 2.9.3的基础上发展而来。Sakai 10中增加了2个新工具;提供了HTML 5的音频、视频支持;架构改进;约50个安全补丁;性能改进;一些列新功能;以及仅2000个补丁!其中最突出的部分包括:

  • 预约工具,曾经是第三方工具,现在成为Sakai核心工具,由耶鲁大学开发
  • 授权访问工具,曾经是第三方工具,现在成为Sakai核心工具,由密歇根大学开发
  • 在线页面指导教程更新,更容易修改。
  • IMS LTI - 第一个支持LTI 2.0 的学习管理系统(LMS)
  • IMS Common Cartridge (CC) 改进支持。支持CC文件版本1.0,1.1,1.2;并且基于用户选择,可以导出CC格式1.1,1.2。

  • 作业:学生互评作业,小组作业
  • 练习与测验:支持新的问题类型(计算题和扩展匹配),改进数字答案精度,设置界面改进。
  • 课程组织:重新设计工具栏并简化,更好支持音频和视频,新增内容表格,提供内联调查,更友好的界面。
  • 资源:支持通过拖拽的方式直接添加文件;如果使用Chrome,可以直接拖拽文件夹。
  • 大纲:新的用户界面,批量更新大纲内容,更好的链接集成。
  • 成绩册:支持附加分。
  • 分布缓存:支持 JCache/JSR-107,优化默认缓存大小,简化配置。无丢失地从一台服务器到另一台服务器进行会话复制。提升大型Sakai部署的性能(此功能默认不开启)。

  • Keitai项目:增强Sakai在移动设备上的可用性。
  • 支持 Google Analytics.
  • 安全更新:Sakai社区修补了大约50个安全问题,包括XSS,CSRF。AntiSamy在2.9.3和10中默认开启。AntiSamy保证用户上传的HTML/CSS符合相应规则。
  • 学生成功门户 - 新增集成。
  • Java - 支持JDK 7.x,JDK 8.x 的支持正在进行
  • 简化Sakai技术组织。 合并大量“独立”工具来简化Sakai发布和问题反馈。

Sakai 10 致谢

 点击展开

以下学校按学校英文名排序
  • 美国开放大学 - American Public University 
  • Apereo基金会 - Apereo Foundation
  • AsahiNet International

  • 波士顿大学 - Boston University

  • 布鲁克大学 - Brock University

  • 哥伦比亚大学 - Columbia University

  • 杜克大学 - Duke University

  • Educlever

  • Flying Kite Australia

  • 复旦大学 - Fudan University

  • 印第安那大学 - Indiana University

  • Longsight

  • 芝加哥洛约拉大学 - Loyola University Chicago

  • 曼利斯特学院 - Marist College

  • 纽约大学 - New York University

  • OpenCollab

  • 牛津大学 - Oxford University
  • 佩珀代因大学 - Pepperdine University
  • 罗格斯大学 - Rutgers University

  • Samoo

  • 塞米诺尔佛罗里达州立学院 - Seminole State College of Florida

  • 西班牙Sakai用户组 - Spanish Sakai Users Group (S2U)

  • 斯坦福大学 - Stanford University

  • Three Canoes
  • 塔夫斯大学 - Tufts University
  • Unicon

  • 拉里奥哈国际大学 - Universidad Internacional de La Rioja

  • 莫夕亚大学 - Universidad de Murcia
  • 瓦伦西亚理工大学 - Universidad Politécnica de Valencia

  • 纳瓦拉公立大学 - Universidad Pública de Navarra

  • 莱里达大学 - Universitat de Lleida

  • 滨海大学 - Université du Littoral Côte d'Opale

  • 巴黎第六大学 - Université Pierre et Marie Curie

  • 加州大学默塞德分校 - University of California - Merced

  • 开普顿大学 - University of Cape Town

  • 戴顿大学(俄亥俄) - University of Dayton (Ohio)
  • 佛罗里达大学 - University of Florida
  • 密歇根大学 - University of Michigan

  • 北卡罗来纳州大学教堂山分校 - University of North Carolina - Chapel Hill

  • 弗吉尼亚大学 - University of Virginia

  • 怀俄明大学 - University of Wyoming

  • Western University
  • 耶鲁大学 - Yale University

Sakai 10 新功能详细列表

 点击展开
新功能说明和展示可以参考:http://www.unicon.net/sakai10-whatsnew
工具
对应JIRA
备注及配置说明
系统管理员
  SAK-19952 - Getting issue details... STATUS  

通知

  SAK-23298 - Getting issue details... STATUS

  SAK-25484 - Getting issue details... STATUS

作业

  SAK-24338 - Getting issue details... STATUS

  SAK-22282 - Getting issue details... STATUS  
  SAK-23812 - Getting issue details... STATUS  
  SAK-19147 - Getting issue details... STATUS  
  SAK-23904 - Getting issue details... STATUS  
  SAK-23872 - Getting issue details... STATUS  
  SAK-23787 - Getting issue details... STATUS  
  SAK-23232 - Getting issue details... STATUS  
  SAK-20723 - Getting issue details... STATUS  
聊天室
  SAK-24207 - Getting issue details... STATUS  
富文本编辑器
  SAK-24415 - Getting issue details... STATUS

  SAK-26044 - Getting issue details... STATUS

  SAK-22001 - Getting issue details... STATUS

投递箱

  SAK-5350 - Getting issue details... STATUS

  SAK-25433 - Getting issue details... STATUS

讨论区

  SAK-24854 - Getting issue details... STATUS

根据站点角色查看发帖,根据发帖数量查看。

  SAK-24866 - Getting issue details... STATUS msgcntr.forums.defaultAvailabilityTime (例如 
msgcntr.forums.defaultAvailabilityTime=8:00am)
  SAK-24865 - Getting issue details... STATUS

  SAK-24862 - Getting issue details... STATUS

默认关闭

msgcntr.forums.import.openCloseDates=true (默认)

  SAK-24861 - Getting issue details... STATUS

  SAK-24859 - Getting issue details... STATUS

  SAK-24855 - Getting issue details... STATUS

  SAK-24858 - Getting issue details... STATUS

默认关闭

mc.alwaysShowFullDesc=true (默认false)

  SAK-24856 - Getting issue details... STATUS

成绩册

  SAK-25700 - Getting issue details... STATUS



  SAK-25546 - Getting issue details... STATUS

  SAK-23193 - Getting issue details... STATUS
属性:
gradebook.defaultMaxDisplayedScoreRows 

选项:
gradebook.defaultMaxDisplayedScoreRows=5 
gradebook.defaultMaxDisplayedScoreRows=10 
gradebook.defaultMaxDisplayedScoreRows=15 
gradebook.defaultMaxDisplayedScoreRows=20 
gradebook.defaultMaxDisplayedScoreRows=50 
gradebook.defaultMaxDisplayedScoreRows=100 
gradebook.defaultMaxDisplayedScoreRows=0 (this means "all") 

如果不进行设置,默认为50。
  SAK-22205 - Getting issue details... STATUS

  SAK-21225 - Getting issue details... STATUS

  SAK-18398 - Getting issue details... STATUS

  SAK-14519 - Getting issue details... STATUS gradebook.display.total.points=true (默认false)

课程组织

  LSNBLDR-355 - Getting issue details... STATUS

  LSNBLDR-345 - Getting issue details... STATUS

  LSNBLDR-344 - Getting issue details... STATUS

  LSNBLDR-328 - Getting issue details... STATUS

  LSNBLDR-326 - Getting issue details... STATUS

  LSNBLDR-289 - Getting issue details... STATUS

  LSNBLDR-287 - Getting issue details... STATUS

  LSNBLDR-286 - Getting issue details... STATUS

  LSNBLDR-234 - Getting issue details... STATUS

  LSNBLDR-208 - Getting issue details... STATUS lb-notes.pdf
  LSNBLDR-190 - Getting issue details... STATUS

从Sakai 10中移除链接工具

 提案:废弃链接工具 (从trunk .externals移除)  

邮件发送

  SAK-25393 - Getting issue details... STATUS

通过sakai.properties中的两个属性配置发信地址的本地部分和机构部分:

smtp.postmaster.address.local-part 
smtp.postmaster.address.domain

消息

  SAK-25643 - Getting issue details... STATUS

  SAK-25257 - Getting issue details... STATUS

  SAK-24871 - Getting issue details... STATUS

  SAK-24869 - Getting issue details... STATUS

  SAK-24860 - Getting issue details... STATUS

  SAK-24857 - Getting issue details... STATUS

OSP (学档)

 默认关闭学档类型的创建。Sakai 11中将移除OSP。

调查工具

  SAK-25399 - Getting issue details... STATUS showPublicAccess@org.sakaiproject.tool.poll.api.PollListManager=true 
默认 false

信息发布

  SAK-22780 - Getting issue details... STATUS 使用标准Sakai文件选择器

个人信息

 提案:将roster2加入核心工具,移除roster和profile1 
  PRFL-846 - Getting issue details... STATUS  
  PRFL-834 - Getting issue details... STATUS  
  PRFL-807 - Getting issue details... STATUS  
  PRFL-746 - Getting issue details... STATUS  
  PRFL-740 - Getting issue details... STATUS  
  PRFL-682 - Getting issue details... STATUS  
  PRFL-840 - Getting issue details... STATUS  

Project Keitai - improved support for mobile applications

   

密码重置 和 账户验证

  SAK-24427 - Getting issue details... STATUS  
  SAK-24366 - Getting issue details... STATUS account-validator.terms={包含学期和条件的URL}
  SAK-24365 - Getting issue details... STATUS

需要在sakai.properties中添加: 

#resetAllRoles 允许所有角色 (默认false) 
resetAllRoles=false 
#允许重置系统管理员密码(默认false) 
resetSuperusers=false 

例如:允许除系统管理员外的所有用户
resetAllRoles=true 
resetSuperusers=false 

To have it as the sakai actual behaviour (because if a superuser is included in

the allowed user types it can be changed) 

resetAllRoles=false 
resetSuperusers=true 

资源

  SAK-25868 - Getting issue details... STATUS  
  SAK-25455 - Getting issue details... STATUS  
  SAK-25371 - Getting issue details... STATUS  
  SAK-23587 - Getting issue details... STATUS

# list of macros that will be expanded when used in a web link in resources. 
content.allowed.macros=${USER_ID},${USER_EID},${USER_FIRST_NAME},

${USER_LAST_NAME}

  SAK-23305 - Getting issue details... STATUS # Control the default hidden status of imported resources content 
# when using Import from Site > Re-use Content feature in Site Info (SAK-23305
# Default: false (visible) 
# Since: 2.10 
#content.import.hidden=true
  SAK-23044 - Getting issue details... STATUS  
  SAK-23306 - Getting issue details... STATUS content.upload.dragndrop=true (默认开启)
  SAK-22004 - Getting issue details... STATUS  
  SAK-21855 - Getting issue details... STATUS content.make.site.page (默认false)

花名册

 

提案:将roster2加入核心工具,移除roster和profile1

 
  RSTR-65 - Getting issue details... STATUS  
  RSTR-64 - Getting issue details... STATUS  
  RSTR-59 - Getting issue details... STATUS  
  RSTR-55 - Getting issue details... STATUS  

搜索

  SRCH-130 - Getting issue details... STATUS 必须设置search.enable=true来启用搜索功能
  SRCH-119 - Getting issue details... STATUS search.service.impl=org.sakaiproject.search.elasticsearch.ElasticSearchService 
search.indexbuilder.impl=org.sakaiproject.search.elasticsearch.ElasticSearchIndexBuilder
  SRCH-111 - Getting issue details... STATUS  
 

预约工具

 Sakai新工具 

Statistics

 No new capabilities 

大纲

 升级大纲工具 
  SAK-22283 - Getting issue details... STATUS  
  SAK-23451 - Getting issue details... STATUS  
  SAK-23441 - Getting issue details... STATUS  
  SAK-23342 - Getting issue details... STATUS  
  SAK-23303 - Getting issue details... STATUS  
  SAK-23270 - Getting issue details... STATUS  
 

练习与测验

  SAM-2296 - Getting issue details... STATUS samigo.question.show.extendedmatchingitems 
samigo.question.show.fileupload 
samigo.question.show.essay 
samigo.question.show.audio 
samigo.question.show.matching 
samigo.question.show.truefalse 
samigo.question.show.multiplechoicesinglecorrect 
samigo.question.show.multiplechoicemultiplecorrect 
samigo.question.show.fillintheblank 
samigo.question.show.fillinnumeric 
samigo.question.show.survey 
samigo.question.show.matrixsurvey 
samigo.question.show.calculatedquestion
  SAM-2151 - Getting issue details... STATUS  
  SAM-2087 - Getting issue details... STATUS  
  SAM-1943 - Getting issue details... STATUS  
  SAM-1733 - Getting issue details... STATUS  
  SAM-1660 - Getting issue details... STATUS  
  SAM-1604 - Getting issue details... STATUS  
  SAM-1566 - Getting issue details... STATUS  
  SAM-1457 - Getting issue details... STATUS  
  SAM-1402 - Getting issue details... STATUS  
  SAM-1368 - Getting issue details... STATUS  
  SAM-1139 - Getting issue details... STATUS  
  SAM-658 - Getting issue details... STATUS  
  SAM-1709 - Getting issue details... STATUS  
  SAM-2166 - Getting issue details... STATUS  

批量上传/下载资源 (WebDav)

  SAK-26072 - Getting issue details... STATUS  

视频聊天

  SAK-23349 - Getting issue details... STATUS  

Wiki

  SAK-23566 - Getting issue details... STATUS  
 

新功能特殊说明

 点击展开

下面的说明描述了如何在Sakai中使用部分新功能。

Sakai 10 测试功能(默认关闭):

实时聊天 (Sakai 2.9)

视频聊天 (新增)

响应式设计

Elasticsearch 是新的默认搜索工具。在Sakai配置文件中,通过设置 search.enable=true 启用搜索工具。 ElasticSearch 会消除旧有的搜索索引。默认情况下,搜索功能是关闭的,只有启用搜索工具的站点才会被索引。搜索工具使用标准文本分析器,并可以通过配置文件进行详细配置。此外,还有另一个新的第三方工具 SOLR 。在Sakai 10中有2个新的配置项。

学档站点默认不能选择


SAK-25587 - Getting issue details... STATUS

默认情况下,站点设置工具中不能创建学档站点;所有OSP工具也将被隐藏,但已有的学档站点依旧可以添加、删除OSP工具。

通过在sakai.propertis中进行下列配置,可以在Sakai中继续创建学档站点、使用OSP工具:

site.types = course,project,portfolio

在Sakai 11中,OSP可能会被彻底移除。

练习与测验现在允许编辑已发布测验的成绩


SAM-1457 - Getting issue details... STATUS

这个功能允许教师编辑已发布作业的成绩,然后再发布。此功能可以通过管理员为特定站点进行设置,由此管理员可以根据教师的需要进行特定设置。

* 已管理员身份登录,进入Administration Workspace

* 通过站点管理工具为编辑特定站点

* 添加属性,名称:samigo.editPubAssessment.restricted ,值'false'

* 保存修改

* 然后就可以在此站点内修改已发布测验了

 

逻辑流程:

* 如果站点属性存在,遵从站点属性。

* 如果没有站点属性,那么使用sakai.properties中的"samigo.editPubAssessment.restricted"设置。

CAS login configuration

在Sakai 10中配置CAS比以前更容易了。只需要在sakai.home中使用这里的样例配置即可(https://source.sakaiproject.org/svn/login/trunk/login-tool/tool/xlogin-context.xml)。其它登录系统也可以使用类似方式配置。参考: SAK-23187 - Getting issue details... STATUS

更多关于此设置的配置信息,可以参考:https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml

 

Sakai 11 的计划
ReleaseTool/ServiceTicketIssue
10.0Events SAM-658 - Getting issue details... STATUS 事件模型变化。

系统需求

 点击展开

操作系统选择

Sakai是操作系统中立的。可以安装在绝大多数的Linux发行版上。常见的Linux发行版包括CentOS,Debian GNU/Linux,Fedora,Gentoo Linux,Red Hat Enterprise Linux (RHEL),SUSE Linux,Ubuntu。Sakai也可以运行在Mac OS X服务器,Microsoft Windows以及Sun Solaris上。Linux意外的操作系统没有被充分测试过,所有的社区测试服务器都是部署在Linux上,所以一般也建议使用Linux来部署Sakai。

Java

Sakai 10 主要在Oracle Java 7下进行测试. 但应该在Java 6(Java 1.6)环境下也可以正常运行。但编译系统至少需要JDK 6或以上版本;JDK 8环境应该也可以运行。有些文件(例如*.jsp和*.jws)需要在部署后进行编译,所以仅仅安装JRE是不够的,必须要安装JDK。

Sakai 10 (2014发布)

版本要求 Java 6+。基于 Java 7进行测试。需要使用 Java 6-8进行编译。

Sakai 11 可能需求 (2015发布)

版本要求 Java 7+。可能基于 Java 8进行测试。可能需要使用Java 7-8进行编译。

影响JRE兼容性的主要原因是引入了Java语言的新功能或新函数。

 

Oracle Sun Java J2SE 5.0 (Java 1.5) 已经结束了生命周期,不再被官方维护。如果您还在使用 Java 1.5,请注意相关安全问题,并升级到1.5.0_17或更新版本。

应用服务器选择

推荐使用Apache Tomcat 7,这是被充分测试的应用服务器,一般会与Apache HTTP Server这样的Web服务器一起使用。有些学校也成功使用了Windows IIS或Nginx作为Web服务器。还有一些学校(香港科技大学和瓜达拉哈拉大学)使用JBoss运行Sakai,但这里不提供相关的安装指导。在Sakai 10完成开发时,Tomcat 8依旧处于beta状态,所以没有进行过相关测试。

Sakai 2.8.0和之前版本需要Tomcat 5.5,但可以通过修改配置运行在Tomcat 7中。Sakai 2.9.0及以后版本需要运行Tomcat 7,并需要修改Tomcat的配置来使其正常运行。具体信息请参考这篇文档。

不再支持Websphere

Sakai 2.7.0中包含Websphere模块来支持Websphere/DB2生产环境,然而由于缺乏维护,Websphere已不被支持。

 

数据库选择

现有Sakai生产环境中,使用最多的是MySql 5.5或更新版本,Oracle其次;已知的使用Oracle版本包括10g,11g,12c。Sakai并不局限于这两种数据库,与其它关系型数据库的集成也不是很困难。曾经有学校使用Microsoft SQL Server作为数据库,Sakai开发者中也偶尔有人建议支持PostgreSQL。但是,目前Sakai社区中没有人支持除MySQL和Oracle以外的数据库。

不再支持IBM DB2

Sakai 2.7.0中增加了IBM DB2支持,但是在2.8.0中,数据库更新脚本没有被更新和测试。所以Sakai不再支持DB2,包括此后的2.9.x。
Sakai demo版使用HSQLDB作为数据库,但请不要在生产环境中进行使用。

集群,文件存储和负载均衡策略

典型的Sakai集群使用多台服务器,每个服务器上部署一个或多个Tomcat,然后还可以将这些服务器部署在Apache HTTP Server之后。其中,每个Tomcat中部署一份完整的Sakai。另外还需要部署一台数据库服务器。

将用户文件保存在数据库外是推荐的做法,但需要在Sakai的配置文件中进行设置。多数部署Sakai的学校使用NAS或SAN来存储文件。负载均衡通过Apache HTTP Server(通过mod_jk,mod_proxy,mod_proxy_balancer或mod_proxy_ajp等模块)或者负载均衡硬件(如F5 BIG-IP,NetScaler或Zeus)实现。 

外部认证

Sakai可以与许多外部认证系统集成,如CAS,Kerberos,LDAP,Shibboleth,WebAuth。

与学生信息系统集成

Sakai社区中的高校成功集成过Datatel,Peoplesoft和其它高校自己编写的学生信息系统。

Sakai有几种基本的集成外部系统的方法。这几种方法可以混合使用。第一种是使用Sakai "provider" API,Sakai在运行时可以通过调用这些API获取信息,包括用户帐号,用户信息,课程信息,用户角色等。

用户帐号 API:Sakai用来确定用户是否可以登录到系统。可以用于Kerberos,Active Directory或者LDAP来进行验证用户身份。

用户信息 API: Sakai用来获取用户姓名、email等信息,获取的来源可以是LDAP或X.509。通过选择性地展示用户信息,可以保护用户隐私。

开课成信息API:Sakai用来获取课程信息、选课信息。

用户角色API:Sakai用来判定特定用户在响应站点中所处的角色。

以上API都是“拉取”API,只有在Sakai系统需要相关信息的时候,才会被调用。

如果需要将数据“推送”到Sakai,有2种方案 - 计划任务和Web Services。

Sakai通过内部叫做Quartz的系统执行批量计划任务,通过创建相关的Java类,执行数据同步任务,并通过类似cron表达式的方法按周期运行相关任务。

另一种更加普遍的方法是将相关数据通过Web Services的方法推送到Sakai。通过Web Services,可以简介访问很多Sakai的API。REST和SOAP接口可以被多种语言调用。系统管理员也可以根据实际需要创建自己的Web Services。但这种方法在数据量大时,可能会产生一定的性能问题。

 

浏览器兼容性

 点击展开

Sakai 10 支持主流浏览器的最新版本

完全支持:(大多数Sakai 10发布时的最新主流浏览器版本)

  • IE 11
  • Safari 7+
  • Firefox 29+
  • Chrome 35+ 

部分支持:

  • IE 8,9,10
  • Safari 4-6
  • Firefox 3.5+

不支持:

  • IE 7 及更早版本
  • Safari 3.2
  • Firefox 3.0

 

 

说明

完全支持:在这些浏览器上进行了充分的测试。开发人员使用这些浏览器进行开发确认,测试人员专注于这些浏览器上的测试。如果遇到问题,请在jira.sakaiproject.org 提交问题。

部分支持:只有少数测试人员使用这些浏览器,但基于浏览器兼容性的考量,这些版本应该被支持。有些功能可能不能100%工作。如果遇到问题,建议您先升级浏览器。

不支持:没有测试人员使用这些浏览器,可能存在兼容性问题。所有这些浏览器上遇到的问题将不会被社区解决。

下载

 点击展开

 

下载信息

关于下载信息,请查看发布页面:http://source.sakaiproject.org/release/10.0/

 

要获得Sakai源代码有两种方法。您可以从发布页面中下载打包的*zip或*tar.gz文件,也可以直接通过Subversion(SVN)从代码库中签出。

Demo版本
Sakai Demo是一个包含Apache Tomcat的预编译、配置Sakai版本,非常适合用于展示Sakai的功能。不建议将Demo用于大规模应用,仅适合用于体验Sakai的功能。

二进制版本
Sakai二进制版本是一个不包含Apache Tomcat的预编译Sakai版本,其中还包含了依赖的jar、配置文件。您可以将此版本中的文件直接复制到Tomcat中进行试用。

源代码版本
Sakai源代码版本包含Sakai的源代码。如果您希望修改Sakai的源代码,那么请使用这个版本。

签出源代码
Sakai的源代码可以直接匿名从SVN代码库中签出。最新的代码在/trunk中,稳定版本在/tags中,维护、试验以及其它工作在/branches中。

例如,可以通过下面的命令签出稳定版Sakai 10:

# svn co https://source.sakaiproject.org/svn/sakai/tags/sakai-10.0/ sakai-10.0

维护分支
特定版本的最新修补可以在维护分支中找到。请注意,有些分支补丁可能需要更新数据库表结构。您可以通过下面的命令签出维护分支中的Sakai 10:

svn co https://source.sakaiproject.org/svn/sakai/branches/sakai-10.x/ sakai-10.x

Sakai 10 与独立工具(Indies)

Sakai 10在主版本中不再包含独立工具(indie)。(几乎)所有的内容都是下载后编译,其中的例外包括RSF,Generic DAO这样的库,以及通过maven中央库进行部署的类包。

 

安装

 点击展开

 

安装技巧

Sakai可以通过高度定制来满足您的本地需求。所以建议您阅读Sakai的配置文件了解如何根据自己学校的情况来进行定制。比配置文件更详细的说明一般可以在Sakai Jira中找到。

Sakai 10.0 默认配置

Demo版安装

安装Sakai 10 Demo版

Binary版安装

安装Sakai 10 Binary版

Source版安装

安装Sakai 10 Source版

Sakai 10 中已知问题

 

版本
工具/服务
JIRA编号
10.0Samigo 练习与测验  SAK-26292 - Getting issue details... STATUS
10.0资源 SAK-26294 - Getting issue details... STATUS


Sakai 10中事件的主要变化

 

版本
工具/服务
JIRA编号
说明
10事件SAM-658 - Update events in assessments ( Closed)事件主要变化。


未解决 Jira 问题

如要显示为解决问题列表,请点击下列链接:

Blocker Critical Major Minor, trivial

Sakai 10 皮肤

TBD

 

升级

 点击展开

 

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

MySQL

Oracle

Notes

2.6.0

sakai_2_6_0_mysql_conversion.sql

sakai_2_6_0_oracle_conversion.sql

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

sakai_2_6_0-2_6_x_mysql_conversion001_SAK-16668.sql

sakai_2_6_0-2_6_x_oracle_conversion001_SAK-16668.sql

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

sakai_2_6_0-2_6_x_mysql_conversion002_SAK-16548.sql

sakai_2_6_0-2_6_x_oracle_conversion002_SAK-16548.sql

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

sakai_2_6_0-2_6_x_mysql_conversion003_SAK-16847.sql

sakai_2_6_0-2_6_x_oracle_conversion003_SAK-16847.sql

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

2.6.0 to 2.6.x

sakai_2_6_0-2_6_x_mysql_conversion004_SAK-10512.sql

sakai_2_6_0-2_6_x_oracle_conversion004_SAK-10512.sql

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

sakai_2_6_0-2_6_1_mysql_conversion.sql

sakai_2_6_0-2_6_1_oracle_conversion.sql

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

sakai_2_6_0-2_6_x_mysql_conversion005_SAK-14482.sql

sakai_2_6_0-2_6_x_oracle_conversion005_SAK-14482.sql

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.6.2-2.7.0

sakai_2_7_0_mysql_conversion.sql

sakai_2_7_0_oracle_conversion.sql

 

2.7.0-2.7.1

sakai_2_7_0-2_7_1_mysql_conversion.sql

sakai_2_7_0-2_7_1_oracle_conversion.sql

 

2.7.1-2.7.2

sakai_2_7_1-2_7_2_mysql_conversion.sql

sakai_2_7_1-2_7_2_oracle_conversion.sql

 

2.8.0

sakai_2_8_0_mysql_conversion.sql

sakai_2_8_0_oracle_conversion.sql

2.7.1 to 2.8.0 database conversion.

2.8.0

sakai_2_8_0_mysql_hbm_indexes.sql

sakai_2_8_0_oracle_hbm_indexes.sql

Starting up sakai-2.8.0 in order to populate an empty database (auto.ddl=true) can result in certain tools relying on Hibernate 3.2.7.ga 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.8.2sakai_2_8_1-2_8_2_mysql_conversion.sqlsakai_2_8_1-2_8_2_oracle_conversion.sql 
2.8.3sakai_2_8_2-2_8_3_mysql_conversion.sqlsakai_2_8_2-2_8_3_oracle_conversion.sql 
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 .
2.9.1

sakai_2_9_1_mysql_conversion.sql

sakai_2_9_1_oracle_conversion.sql

 

 
2.9.2

sakai_2_9_2_mysql.sql

LTI 2_1_0_mysql_conversion.sql

 

sakai_2_9_2_oracle.sql

LTI_2_1_0_oracle_conversion.sql

 
2.9.3

sakai_2_9_3_mysql.sql

 

sakai_2_9_3_oracle.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.1sakai_10_0-10_1_mysql_conversion.sqlsakai_10_0-10_1_oracle_conversion.sql 
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 
10.5sakai_10_1-10_5_mysql_conversion.sqlsakai_10_3-10_5_oracle_conversion.sql 

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 mailarchive-runconversion.sh 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 mailarchive-runconversion.sh. Please see the SAK for more information on this script or SAK-16554 for
-- updates to this script.
	  	 
	  	 CREATE INDEX IE_MAILARC_SUBJECT ON MAILARCHIVE_MESSAGE
 	  	 (
 	  	        SUBJECT                   ASC
 	  	 );
	  	 ALTER TABLE MAILARCHIVE_MESSAGE ADD COLUMN (
 	  	        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 https://source.sakaiproject.org/svn/assignment/tags/sakai_2-7-0.

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 sakai.properties 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.

Sprites

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;
    width:100%
}

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.

 skin_name

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-default

neo-default-horiz

neo-examp-u


neo-gen-u (embarrasing!)


neo-oae


neo-some-u


neo-rtl


 

 

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/sakai.properties
  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.

Logos

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” tray.you 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:

http://localhost:8080/portal/pda

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)

and

.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;
    position:absolute;
    top:10px;
    left:20px;
    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);
    background-repeat:repeat-x;
}

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: http://screencast.com/t/SmOGcMzW

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 sakai.properties) 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 sakai-dev@collab.sakaiproject.org. If you discover any bugs or have suggestions, create a Jira with reference (and/or portal) as the components.

 

 

配置

 点击展开

 

1.0 Create a sakai.properties file

The sakai.properties 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 java.util.properties. Settings in sakai.properties govern everything from setting your institution's name to configuring your database. All settings in sakai.properties 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 local.properties file in the same directory as sakai.properties. Properties listed in local.properties override sakai.properties. 

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

sakai-src/config/configuration/bundles/src/bundle/org/sakaiproject/config/bundle/default.sakai.properties

(warning) The bin package does not include a sakai.properties file. This is a deliberate exclusion; it eliminates the possibility of overwriting a local sakai.properties 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 sakai.properties 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 default.sakai.properties file included in the source installation or in the appropriate maintenance branch.

The default location for your local sakai.properties 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 sakai.properties 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.

-Dsakai.home=/path/to/desired/sakai/home/
(info) For list of sakai.properties settings see the Sakai Properties Reference; for detailed documentation on the full variety of possible sakai.properties 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.iframe.site, sakai.summary.calendar, sakai.synoptic.announcement, sakai.synoptic.chat, 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.
wsetup.home.toolids.count=5
wsetup.home.toolids.1=sakai.privacy
wsetup.home.toolids.2=sakai.iframe
wsetup.home.toolids.3=sakai.synoptic.announcement
wsetup.home.toolids.4=sakai.synoptic.chat
wsetup.home.toolids.5=sakai.synoptic.messagecenter

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.properties:
wsetup.group.helper.name = 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 sakai.properties with a time interval of your choosing:

timeoutDialogEnabled=true
timeoutDialogWarningSeconds=600

5.0 Configure email

Enabling Sakai to both send and receive email requires setting a number of properties in sakai.properties. In order to send mail Sakai requires the address (name or IP) of an external SMTP server that will accept mail from Sakai:
smtp@org.sakaiproject.email.api.EmailService=some.smtp.org

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)
#Default=false.
smtp.enabled=true

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

# 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.
smtp.port=8025

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

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

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

# Send an email to the user when the user is added.
notifyNewUserEmail=true

 
#For msgcntr notifications
msgcntr.notification.from.address
 
#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 sakai.properties. This augments and overrides the levels set in the default config file. Example:

log.config.count=3
log.config.1 = ALL.org.sakaiproject.log.impl
log.config.2 = OFF.org.sakaiproject
log.config.3 = DEBUG.org.sakaiproject.db.impl

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/log4j.properties the following property:

log4j.logger.org.sakaiproject=INFO

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:

log4j.logger.org.sakaiproject=INFO
log4j.logger.org.sakaiproject.component.framework.sql.BasicSqlService=DEBUG

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 sakai.properties:

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/startup.sh; 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).

新增配置项、权限

 点击展开

 

1.0 Property additions/changes

 

Release

Tool/Service

Property

Ticket

Change

10.0Search

Not recommended, but available for using the pre-Sakai 10 search tool. ElasticSearch is the default. These properties would revert to legacy search.

search.service.impl=org.sakaiproject.search.component.service.impl.ConcurrentSearchServiceImpl
search.indexbuilder.impl=org.sakaiproject.search.component.service.impl.SearchIndexBuilderImpl

SRCH-130 - Getting issue details... STATUS ElasticSearch is the new default. Using the legacy search tool is not recommended.
10.0Search  SRCH-119 - Getting issue details... STATUS  
10.0Samigo (Test and Quizzes)

All question types are enabled by default.

It is correct that multiplechoice has two properties to be set (historical reasons for this)

samigo.question.show.extendedmatchingitems 
samigo.question.show.fileupload 
samigo.question.show.essay 
samigo.question.show.audio 
samigo.question.show.matching 
samigo.question.show.truefalse 
samigo.question.show.multiplechoicesinglecorrect 
samigo.question.show.multiplechoicemultiplecorrect 
samigo.question.show.fillintheblank 
samigo.question.show.fillinnumeric 
samigo.question.show.survey 
samigo.question.show.matrixsurvey 
samigo.question.show.calculatedquestion

SAM-2296 - Getting issue details... STATUS New feature for Sakai 10. Institutions may configure which question types they use in Samigo and which they do not.
10.0OSP (Portfolios)osp.freeform.disabled=true OSP layouts are off by default. Do not turn OSP layouts on without consulting with the Sakai developer community (in other words it is strongly recommended you keep OSP layouts turned off by default.)
10.0Support for Google Analytics

example properties

portal.google.analytics_id=UA-12345-5 
portal.google.analytics_domain=http://www.dr-chuck.com/ 
portal.google.analytics_detail=true 

When a analytics_id is specified, the GA (ga.js) code is include in the portal pages. If analytics_detail is true, the user's eid and siteId are sent as Custom Variables 1 and 2. 

https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingCustomVariables

SAK-25634 - Getting issue details... STATUS This JIRA will add support to Sakai's portal to include JavaScript to add Google analytics to all of the pages served by Sakai.
10.0Pollspoll.allow.public.access is false by default. New property. SAK-25399 - Getting issue details... STATUS Polls can now be made public more easily.
10.0Mailsender

Default is OOTB "postmaster@"+host.

This can be problematic for institutions that need to configure this value for dev/qat environments. 

smtp.postmaster.address.local-part 
smtp.postmaster.address.domain

SAK-25393 - Getting issue details... STATUS Allow configuration of mail "from:"
10.0Portalbottom.copyrighttext is "currentYearFromServer", SAK-25293 - Getting issue details... STATUS To save system administrators' time, the copyright end date should automatically update to the current year, if the institution chooses.
10.0Messages

The new feature to display profile images will be disabled by default.

msgcntr.pvtmsg.showProfileInfo = true 

Additionally, if profile images are enabled and you do not want to allow linking to the profile information, you can utilize the following profile2 property. If absent, this defaults to true: 

profile2.profile.link.enabled

SAK-24869 - Getting issue details... STATUS Just like Forums is displaying the profile picture [1], our users can see the sender's picture when reading their messages
10.0Forums

example:

msgcntr.forums.defaultAvailabilityTime=8:00am

SAK-24866 - Getting issue details... STATUS Instead of using the current time as default for availability.
10.0Forums
msgcntr.forums.import.openCloseDates=true (false by default)
SAK-24862 - Getting issue details... STATUS Supports a case where instructors create parent sites and import the information into section sites for the same semester.
10.0Forumsmc.alwaysShowFullDesc=true (default false) SAK-24858 - Getting issue details... STATUS When you load the main forum's page, let there be a property that will allow an institution to decide whether the full description is shown or hidden. 
10.0Forumsmsgcntr.forum.rankimage.maxsize SAK-24854 - Getting issue details... STATUS  
10.0Messages

Default is false.

mc.messages.forwardEmailDisabled=true/false

 

SAK-24850 - Getting issue details... STATUS This can turn on/off the "CC" option when sending a message in the "Message" tool for all sites (institution level). If the property is true, then all sites will not have this option, otherwise, it defers to site level settings.
10.0Messagesmc.messages.ccEmailDisabled=true/false SAK-24849 - Getting issue details... STATUS An institution can not disable the CC option, until now. They can set the default to false (mc.messages.ccEmailDefault=false) but an instructor could change it at the site level. This property completely removes this from the UI and force the value to false: 
10.0PDA Portalportal.pda.iframesuppress=:all: (new default) SAK-25494 - Getting issue details... STATUS  
10.0Config#How many days to retain deleted content 
content.keep.deleted.files.days=30
SAK-24426 - Getting issue details... STATUS  
10.0Site InfoThe sakai.properties introduced by this patch are: 
- sitemanage.join.joinerGroup.enabled=[true/false]  - default is false
- sitemanage.join.notification.enabled=[true/false] 
- sitemanage.join.excludeFromPublicList.enabled=[true/false] 
- sitemanage.join.limitAccountTypes.enabled=[true/false 
- sitebrowser.join.enabled=[true/false] 
- sitemanage.join.allowedJoinableAccountTypeCategories (count + list) 
- sitemanage.join.allowedJoinableAccountTypes (count + list) 
- sitemanage.join.allowedJoinableAccountTypeLabels (count + list)
SAK-24423 - Getting issue details... STATUS  
10.0Password Validationaccount-validator.terms - default is null SAK-24366 - Getting issue details... STATUS Required checkbox on the signup page which is only shown if account-validator.terms is set to a URL which contains the terms and conditions.
10.0Password validationUpdating the default props 

# Role that can use the password reset tool by default. 
# guest users are ones that are created by Site Info when adding external participants. 
# registered users are ones the are created by the New Account tool on the Gateway site. 
# Default: guest 
#resetRoles=guest,registered 

# resetAllRoles allows this to work for any roles in the system (overrides resetRoles above) 
# Default: false 
#resetPass.resetAllRoles=true
SAK-24365 - Getting issue details... STATUS  
10.0 # If you are running Sakai in a cluster behind a load balancer and the load balancer is changing the 
# scheme during forwarding, oauth validation will fail because the scheme is taken into account during the 
# signature comparison. Set this to the scheme that your load balancer is running under and the 
# launch request will be validated, or at least the scheme won't break it. 
# basiclti.provider.forcedurischeme=
SAK-23997 - Getting issue details... STATUS  
10.0Assignmentsproperty: (default true) 
assignment.usePeerAssessment=(true|false)
SAK-23812 - Getting issue details... STATUS  
10.0Password validation

 ## SAK-23737 - User types allowed to bypass password validation when editing account details
# An empty list (no property set) indicates that all types require password validation (default behavior)
# Which user types are provided and will therefore be allowed to bypass the password validation step
#user.type.provided=asdf,qwerty

SAK-23737 - Getting issue details... STATUS  
10.0Site CreationIn the default SectionFieldProviderImpl the sizes are limited to subject=8, course=3, section=3. This should be configurable, since most places use this default implementation. 

Adding 3 new properties 

wsetup.sectionfield.required_fields_subject.max 
wsetup.sectionfield.required_fields_course.max 
wsetup.sectionfield.required_fields_section.max
SAK-23652 - Getting issue details... STATUS  
10.0Portal

default

portal.title.shortdescription.show=false

SAK-23597 - Getting issue details... STATUS  
10.0Turnitinproperty: 

turnitin.forceSingleAttachment (false by default) 

to turn on property: 

turnitin.forceSingleAttachment=true 


This forces the UI to select "Single File Upload Only" and disable the other options. Toggling re-enables the options.
SAK-23592 - Getting issue details... STATUS  
10.0Resources# list of macros that will be expanded when used in a web link in resources. 
content.allowed.macros=${USER_ID},${USER_EID},${USER_FIRST_NAME},${USER_LAST_NAME} 

Note that site related properties will not work because the resolver code is actually called from access which has no context. 
It may be possible to pass in the context since the original resource has context, then site properties would work, however this may have security implications where the link is embedded in another site and that aspect needs to be fully explored. As such it has not been included. It is a trivial exercise to add this though, see BaseContentService in the kernel.
SAK-23587 - Getting issue details... STATUS  
10.0Site
The property site.title.maxlength allow long site titles fix the UI by cutting the end of the title in tabs. 

We've got many long site titles and very similar, for example, "This is the subject part I", "This is the subject part II". In these cases both cutted titles appears to be the same "This is the subj...". 

We want a more flexible way to do it. With 2 new properties: 

   site.title.cut.method = customize the cut method. Default 100:0. 
   site.title.cut.separator = separator string. Default ... 

The value has the format X:Y, wich means X percent of maxlength at the beginning and Y percent of maxlength at the end. Now if you choose 50:50 and [...], the above example, will get something like "This is[...]part I" and "This is[...]part II". 

# Max length for site title display 
# Default 25 characters 
#site.title.maxlength=25 

# Cut method for site title display 
# Default 100:0 display the first site.title.maxlength characters and the separator string at the end 
# Other values: 
# 0:100 display the last site.title.maxlength characters and the separator string at the beginning 
# 50:50 display first site.title.maxlength*50% characters the separator string and the last site.title.maxlength*50% 
#site.title.cut.method=100:0 

# Separator string used to separate characters in cut method 
# Default ... 
#site.title.cut.separator= ... 
SAK-23567 - Getting issue details... STATUS  
10.0Student Success PortalConfiguration will work like so: 
# SSP Early Alert integration 
# Allow Early Alerts integration? (default: false) 
ssp.allowed.alerts=true 
# URL to the SSP server 
ssp.server.url=http://ssp.unicon.net/ssp-platform/sso 
# the shared password between SSP and Sakai 
ssp.alerts.shared.password=********* 
# roles allowed to have SSP Early Alerts (default: access,Student) 
ssp.allowed.alert.roles=access,Student
SAK-23562 - Getting issue details... STATUS  
10.0Site section management

# Allow instructors to create and manage sections by themselves while also
# having some types of sections locked (read only). With this configuration
# (and MANUAL type set) an Instructor can create and manage sections except
# with the configured readonly categories.
# Defines the category codes of sections that are readonly (e.g. 01.lct,02.lab)
# Default: "" (empty) - all sections can be edited
#section.info.readonly.section.categories=

SAK-23495 - Getting issue details... STATUS  
10.0Site creation# Sites with non-editable title (by site type) 
# Example: course - course sites will have read only title. 
# Set as empty "site.type.titleNotEditable=", every site title would be modified. 
# Default: course 
#site.type.titleNotEditable=course,project
SAK-23469 - Getting issue details... STATUS  
10.0Portal Chat

# Specifies the amount of time, in milliseconds, between latestData requests sent by the javascript client.
#portal.chat.pollInterval=5000

SAK-23374 - Getting issue details... STATUS  
10.0Portal Chat & Video

# Set this to true and video calling will be enabled on portal chat.
# DEFAULT: false
# portal.chat.video=true

# A list of nat traversal servers to try during portal chat video calling.
# DEFAULT: stun:stun.l.google.com:19302
# portal.chat.video.servers={list of ice servers}

# The timeout, in seconds, for operations like waiting for a call to be answered.
# DEFAULT: 25
# portal.chat.video.timeout=50

SAK-23349 - Getting issue details... STATUS  
10.0 

# Control the default hidden status of imported resources content
# when using Import from Site > Re-use Content feature in Site Info (SAK-23305)
# Default: false (visible)
# Since: 2.10
#content.import.hidden=true

SAK-23305 - Getting issue details... STATUS  
10.0Portal Chat

# Set this to true and portal chat will be disabled for a user UNLESS portal.chat.permitted is set
# in their MyWorkspace site. Defaults to false.
#portal.chat.securedByUser=false

SAK-23259 - Getting issue details... STATUS  
10.0 

#### SAK-23257: Restrict site maintainer from adding or elevating users to certain roles.
#### For example, prevent the Instructor of a course site from adding new Instructor users
# DEFAULT: empty (no restricted roles)
# You can narrow the restriction to a specific type of site by appending .sitetype
# sitemanage.addParticipants.restrictedRoles=CustomRole
# sitemanage.addParticipants.restrictedRoles.course=Instructor
# sitemanage.addParticipants.restrictedRoles.project=maintain

SAK-23257 - Getting issue details... STATUS  
10.0   SAK-23237 - Getting issue details... STATUS  
10.0Gradebook
property: 

gradebook.defaultMaxDisplayedScoreRows 

options: 

gradebook.defaultMaxDisplayedScoreRows=5 
gradebook.defaultMaxDisplayedScoreRows=10 
gradebook.defaultMaxDisplayedScoreRows=15 
gradebook.defaultMaxDisplayedScoreRows=20 
gradebook.defaultMaxDisplayedScoreRows=50 
gradebook.defaultMaxDisplayedScoreRows=100 
gradebook.defaultMaxDisplayedScoreRows=0 (this means "all") 

By default, the option stays at 50. Also, if you put an option not listed above, it will default to 50
SAK-23193 - Getting issue details... STATUS  
10.0Sections

# SAK-22537: How many sections can be added at one time?
# DEFAULT: 10
#sections.maxgroups.category=20

SAK-22537 - Getting issue details... STATUS  
10.0Login

# Log failed login attempts? Defaults to true.
#login.log-failed=true

SAK-22430 - Getting issue details... STATUS  
10.0Resources

defaults to true

content.upload.dragndrop=(true|false)

SAK-22306 - Getting issue details... STATUS  
10.0Citationscitations.default.list.page.size=50 SAK-22297 - Getting issue details... STATUS  
10.0Assignmentassignment.group.submission.enabled=true SAK-22282 - Getting issue details... STATUS  
10.0Portal

HTML code for branding the Sakai online help

help.header 
help.footer

SAK-22245 - Getting issue details... STATUS  
10.0Site Info/GroupsWe would preferrer not to show the group summary to people on the front page of Site Info, but would still like the group management pages to be available (Manage Groups link). So to support this we allow the groups to be hidden on the front page through a configuration property.

wsetup.group.support.summary=false

This defaults to true so unless set no changes should be seen.
SAK-21989 - Getting issue details... STATUS  
10.0Short URLsThe attached work adds a link next to the help icon in the header of every tool in the portal. When clicked it presents a small 'clue tip' window with the direct tool URL to that particular tool. There is also the option to shorten that URL on the fly. A user can then distribute the URL for that tool.

Two patches attached, one for portal, one for reference.

To activate set:
portal.tool.direct.url.enabled=true

To enabled/disable short URLs:
shortenedurl.portal.tool.enabled=true

Of course, if using the short URLs, you'll want to have the shortened url service configured:
shortenedurl.implementation=org.sakaiproject.shortenedurl.api.RandomisedUrlService

(or the bit.ly implementation, or any other. See also: https://confluence.sakaiproject.org/display/SHRTURL/Home)

Then, once enabled, every tool gets the link icon which gives the little window when clicked. If you didn't want to have this on a certain tool, set this property on the tool:
sakai:tool-directurl-enabled=false
SAK-21865 - Getting issue details... STATUS  
10.0Resources/Web Contentcontent.make.site.page which is set to false SAK-21855 - Getting issue details... STATUS
Allow users to quickly create a Web Content tool in a site from within the resource tool of the site.
10.0Site creation
The properties introduced by this patch are "worksiteSetup.omitSiteCreateLink" and "worksiteSetup.omitCourseSectionLink". Valid values are "true" and "false", where true will hide the links, and false will show them as normal. If the properties are not found, or an invalid value is provided, it defaults to original functionality (links are shown as normal).
SAK-21706 - Getting issue details... STATUS  
10.0Login# Enable the auth choice page. Only set this if container.login=true 
login.auth.choice=true 

And configure it with these properties: 

# Set the icon or text you want for each. Generally you wouldn't use both. 
container.login.choice.icon=http://path/to/image/for/container/login/cas.jpg 
#container.login.choice.text=ANU Users 
xlogin.choice.icon=http://path/to/image/for/container/login/sakai.jpg 
#xlogin.choice.text = Guest Users 

login.use.xlogin.to.relogin=false
SAK-21706 - Getting issue details... STATUS

If you use container login and hit the gateway page, then you get the ability to login with either a CAS account or an internal account.

There should be an intermediate page where users can choose which auth to use.

 

10.0ScheduleTo enable this you set the Sakai property: 

ical.opaqueurl.subscribe=true 

this is set to false by default
SAK-21497 - Getting issue details... STATUS This patch implements "private URLs" for all site calendars. These are unique non guessable URLs (one per user) that one can subscribe to in all calendaring clients (including MS Outlook). This means that a calendar does not have to be exported (ie, made public) in order to subscribe to it. Marge calendars will appears in the ical feed and there is a link on the synoptic view.
10.0 This patch allows an admin to specify additional user attributes when creating or editing a user.

This is configured via sakai.properties as below.

The first section specifies the number of attributes and their keys. The second maps the key to the display value. There can be any number of attributes.

The user is then presented with a text box to fill in the value of the attribute.

user.additional.attribute.count=3
user.additional.attribute.1=att1
user.additional.attribute.2=att2
user.additional.attribute.3=att3

user.additional.attribute.display.att1=Attribute 1
user.additional.attribute.display.att2=Attribute 2
user.additional.attribute.display.att3=Attribute 3

For example:

user.additional.attribute.count=2
user.additional.attribute.1=college
user.additional.attribute.2=room

user.additional.attribute.display.college=College
user.additional.attribute.display.room=Room No

These tie directly in with the user properties for a user, so then show up in the (new for 2.9) 'Properties section' at the bottom. You can also remove the attributes using the X.
SAK-21406 - Getting issue details... STATUS  
10.0Announcementssakai.announcement.reorder=true (default) SAK-21109 - Getting issue details... STATUS  
10.0Quartz configuration
qrtzPropFileSakai@org.sakaiproject.api.app.scheduler.SchedulerManager 

which defaults to "sakai.quartz.properties" and is loaded relative to the sakai.home folder.
SAK-20885 - Getting issue details... STATUS
We still always load quartz.properties from the classpath which is included in the JAR, if there are any problems loading this file we stop (as before). 
Then we look for sakai.quartz.properties in the sakai.home folder and if found load that as well replacing any already loaded properties, if the file exists and there is a problem loading this it is logged but startup continues. 

We still have: 

qrtzPropFile@org.sakaiproject.api.app.scheduler.SchedulerManager 

which sets the file to load from the classpath but we also now have 

qrtzPropFileSakai@org.sakaiproject.api.app.scheduler.SchedulerManager 

which defaults to "sakai.quartz.properties" and is loaded relative to the sakai.home folder.
10.0Sites
qrtzPropFileSakai@org.sakaiproject.api.app.scheduler.SchedulerManager 

which defaults to "sakai.quartz.properties" and is loaded relative to the sakai.home folder.
SAK-20885 - Getting issue details... STATUS  
10.0SitesThe sakai.properties: 
# 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. 
site.soft.deletion=true 

# 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. 
site.soft.deletion.gracetime=30 
SAK-19952 - Getting issue details... STATUS  
10.0Email Archive

default is true

wsetup.mailarchive.prepopulate.email=(true|false)

SAK-19298 - Getting issue details... STATUS  
10.0AssignmentsThis adds an extra checkbox to the download assignments page when "assignment.download.flat=true" is added to the sakai.properties. Otherwise it has no real impact.  SAK-19147 - Getting issue details... STATUS  
10.0Site Info1. sakai.properties (see new properties below) 
2. toolOrder.xml (see attached example) 
3. tools.properties -- (optional) sakai/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/tool/tools.properties (see attached example) 
    ** tools.properties in sakai trunk currently has tool group pre-defined, you only need to modify this in order to customize 


Additions to sakai.propeties, with default values specified: 

# Enable tool groups 
config.sitemanage.useToolGroup=false|true 

# OPTIONAL: Directory for tool 'more info' link. HTML(<body> content) file must have the same name as the tool registration id, with any extension (e.g. sakai.siteinfo.html) 
config.sitemanage.moreInfoDir=library/image/ 
SAK-16600 - Getting issue details... STATUS On the edit tools page for site info, there is potential to have a long, unorganized list of tools. This will increase as new tools are added from contrib or Basic LTI.

This proposal describes how Sakai core tools, contrib tools, and dynamically added Basic LTI ('external') tools can be ordered into pre-defined tool groups. A "more info" link can optionally be added to each tool description, where a tool-specific screenshot can provide additional information. 

Different sets of groups can be configured for different site types (e.g. course, project). The category keyword is required. 
    <group name="core-c" category="course"> 
           ... 
    </group> 
    <group name="core-p" category="project"> 
           ... 
    </group> 

A sample toolOrder.xml file leveraging the new format is attached, along with an sample tools.properties file, updated with tool group localizations. The changes are backward compatible; i.e. if the original toolOrder.xml file format is used, none of the new toolGroup enhancements are displayed. 
10.0Login

### 
 # Url to redirect the user to when they have been disabled. If you do not specify a disabledSiteUrl then the system will use /portal/disabled by default


 ### 
 disabledSiteUrl=https://this.user.is.disabled/disabled

SAK-16499 - Getting issue details... STATUS

It has been requested that a user account should be able to be locked to prevent login, rather than deleting the user. A flag could be added to the User object to track this. The login tools and UserDirectoryService methods could then read this and deny access if a user account is locked.

Currently a new column has been added to the sakai_user table for disabled. This is either 1 or 0, 1 = disabled.

If a user is disabled, then you can select where to have the user redirected to via this sakai.property

###
# Url to redirect the user to when they have been disabled
###
disabledSiteUrl=https://this.user.is.disabled/disabled

If you do not specify a disabledSiteUrl then the system will use /portal/disabled by default. You can go and create a public /portal/disabled site/page for this purpose.

10.0Joinable sitesWhen directly visiting a joinable site allow the user to join. 

This means if a user visits a site which they aren't currently a member of, but the site is joinable then they will be given the option to join the site. If they choose to they will be added to the site and then taken to the site they have just joined. 

To disable this functionality set portal.redirectJoin=false in sakai.properties. 
SAK-15832 - Getting issue details... STATUS  
10.0Gradebook# Controls the display of the "Total Points" column on the overview screen. 
# DEFAULT: false (Total Points column is not shown) 
#gradebook.display.total.points=false
SAK-14519 - Getting issue details... STATUS  
10.0Portal

Changing property flag, added property to enable/disable 

 Default is true
portal.show.time=false 

SAK-7802 - Getting issue details... STATUS  
10.0Rosterroster_view_email=true  RSTR-64 - Getting issue details... STATUS Email addresses can be sensitive in some institutions and should be able to be turned off completely. Once enabled, the instructor can enable permissions based on role.
10.0Roster# Set the list of roles that are visible in the tool. 
# This is useful for filtering the list from helpdesk roles, for example. 
# Access to the tool is not affected, ie the helpdesk user would still have access. 
# If not set, all roles will be visible. 
roster2.visibleroles.count=1 
roster2.visibleroles.1=access 
RSTR-55 - Getting issue details... STATUS Hide certain roles, for example helpdesk roles. They will still have access to the tool if their permission allows, but not be visible in the list for students to see.
10.0Profile

Messaging enabled is the default.

profile2.messaging.enabled=(true|false) 

PRFL-840 - Getting issue details... STATUS Some schools may be concerned about the potential for cheating via private messaging in Profile2. The tool can be configured to disable messaging globally in a Sakai instance.
10.0Profile

Now supports ONE_DEEP which is of the form BASEDIR/s/steve.jpg, which is additive to previous property (from PRFL-682)

# If you are using filesystem as your photo source you need to set this to the base directory where you store 
# them. Profile looks them up by appending the first letter of a user's eid then a slash, then the second 
# letter of the eid followed by a slash and finally the eid suffixed by '.jpg'. 
# Like this: 
# /official-photos/a/d/adrian.jpg 
#profile2.official.image.directory=/official-photos

PRFL-834 - Getting issue details... STATUS

(see PRFL-831)

The filesystem storage of official images added in PRFL-682 requires a certain layout. Some people dont have this layout so we need to be able to support more types of layouts. We wont go so far as to make this fully customisable as it is overkill, but make it easy for different layouts to be used. 

Adding a new layout for 'one deep'.
10.0Profile

#default is profile.official.image.enabled=false . See completed documentation in Sakai default properties.

profile2.official.image.enabled=true 
profile2.picture.type=official 
profile2.official.image.source=filesystem 
profile2.official.image.directory=/Users/steve/dev/sakai/official-images 
profile2.official.image.directory.pattern = ALL_IN_ONE

PRFL-831 - Getting issue details... STATUS You can now override the pattern for storing official images on the filesystem. 

First, enable official images. 
profile2.official.image.enabled=true 

In this case we want the default to be official and the user cannot change the image (for different settings seeProfile2-Settings) 
profile2.picture.type=official 

Now set the source: 
profile2.official.image.source=filesystem 

Now set the base directory. Defaults to /profile-images if not set 
profile2.official.image.directory=/Users/steve/dev/sakai/official-images 

Now set the pattern we want to use. We have all of our images in one directory and all images are of the form eid.jpg (ie jsmith26.jpg) so we choose the ALL_IN_ONE pattern. 
profile2.official.image.directory.pattern = ALL_IN_ONE 

This defaults to DEFAULT which means the pattern /j/s/jsmith26.jpg (ie two sub directories, one character each being the first two letters of the user eid. 

So all together we get: 
profile2.official.image.enabled=true 
profile2.picture.type=official 
profile2.official.image.source=filesystem 
profile2.official.image.directory=/Users/steve/dev/sakai/official-images 
profile2.official.image.directory.pattern = ALL_IN_ONE
10.0Profile
################################
## Available as of version 1.6:
################################
 
# Enable/disable the staff profile feature? (true/false, default true)
profile2.profile.staff.enabled=true

# Enable/disable the student profile feature? (true/false, default true)
profile2.profile.student.enabled=true

# Enable/disable the social profile feature? (true/false, default true)
profile2.profile.social.enabled=true

# Enable/disable the interests profile feature? (true/false, default true)
profile2.profile.interests.enabled=true
PRFL-807 - Getting issue details... STATUS  
10.0Profile
# Convert images from URL to local storage (added in PRFL-740)
profile2.import.images=true
PRFL-740 - Getting issue details... STATUS  
10.0Cacheing# Events and Role Caching - uses a distributed cache to propagate events and roles, rather than reading from the database 
# Data is still persisted to the database 
# Enable distributed caching 
# DEFAULT: false 
#cluster.cache.enabled=false 

# The URLs of the distributed cache servers 
#cluster.cache.server.urls.count=2 
#cluster.cache.server.urls.1={CACHE_SERVER_URL_1}:9510 
#cluster.cache.server.urls.2={CACHE_SERVER_URL_2}:9511 
  
# The caches that will be using the distributed cache. 
# The only ones allowed are eventsCache, eventLastCache, and org.sakaiproject.authz.impl.DbAuthzGroupService.realmRoleGroupCache 
#cluster.cache.names.count=2 
#cluster.cache.names.1=org.sakaiproject.event.impl.ClusterEventTracking.eventsCache 
#cluster.cache.names.2=org.sakaiproject.event.impl.ClusterEventTracking.eventLastCache 
  
# Any Cache properties below that are not set will use the default value 
  
# Events caching properties 
#org.sakaiproject.event.impl.ClusterEventTracking.eventsCache.cache.maxEntriesLocalHeap=100000 
#org.sakaiproject.event.impl.ClusterEventTracking.eventsCache.cache.timeToIdle=120 
#org.sakaiproject.event.impl.ClusterEventTracking.eventsCache.cache.timeToLive=120 

# eventLastCache caching properties (only needs to ever store 1 entry) 
#org.sakaiproject.event.impl.ClusterEventTracking.eventLastCache.cache.maxEntriesLocalHeap=1 
#org.sakaiproject.event.impl.ClusterEventTracking.eventLastCache.cache.timeToIdle=400 
#org.sakaiproject.event.impl.ClusterEventTracking.eventLastCache.cache.timeToLive=800 

# Role and Group caching properties 
#org.sakaiproject.authz.impl.DbAuthzGroupService.realmRoleGroupCache.cache.maxEntriesLocalHeap=100000 
#org.sakaiproject.authz.impl.DbAuthzGroupService.realmRoleGroupCache.cache.timeToIdle=2000 
#org.sakaiproject.authz.impl.DbAuthzGroupService.realmRoleGroupCache.cache.timeToLive=2400 
KNL-1184 - Getting issue details... STATUS  
10.0Serializing Objects
## Session Replication settings 
## WARNING: This requires a distribution mechanism of some kind (currently requires a distributed cache) 
## NOTES: 
## cache: org.sakaiproject.tool.impl.RebuildBreakdownService.cache must be set to a distributed cache (see memory.cluster) 
## cache: org.sakaiproject.tool.impl.RebuildBreakdownService.stash should be configured to last as long 
## as your user might need to navigate to JSF or other on-demand session tools after landing on a new server 
# Enable session cluster replication (see notes above) 
# Default: false 
#session.cluster.replication=true 
## Performance tuning settings below - be careful with these numbers as adjusting them downward can create heavy load 
# Tuning setting, minimum seconds old the session must be before it will be replicated 
# Default: 20 
#session.cluster.minSecsOldToStore=20 
# Tuning setting, minimum seconds that must pass before session data is updated (since last store) 
# NOTE: certain events will cause the session data to be updated in the store regardless of this setting 
# Default: 10 
#session.cluster.minSecsBetweenStores=10 
# Tuning setting, minimum seconds after a session has been rebuilt from the store before it can be updated in the storage again 
# Default: 30 
#session.cluster.minSecsAfterRebuild=30
KNL-1163 - Getting issue details... STATUS  
10.0Formatted Text scansAdded options to default config 

KNL-1075: allow Sakai to behave more like other LMSes and silently clean the user-entered HTML, 
# valid options are listed below: 
# - none - errors are completely ignored and not even stored at all 
# - logged - errors are output in the logs only 
# - return - errors are returned to the tool (legacy behavior) 
# - notify - user notified about errors using a non-blocking JS popup 
# - display - errors are displayed to the user using the new and fancy JS popup 
# Default: notify 
#content.cleaner.errors.handling = return 
# Force the logging of errors despite the handling setting 
# (useful for debugging but can get very noisy) 
# Default: false 
#content.cleaner.errors.display = true
KNL-1075 - Getting issue details... STATUS  
10.0Learning Record Store

# Default: false 
#lrs.enabled=true 


# Default: No filters (all statements processed) 
#lrs.origins.filter=tool1,tool2,tool3


KNL-1042 - Getting issue details... STATUS #########################################################################
# LRS (TinCanAPI / Experience API) 
# ######################################################################## 

# Enable LRS processing 
# Default: false 
#lrs.enabled=true 

# Enable statement origin filters (cause certain statements to be skipped based on their origin) 
# NOTE: most origins are the names of the tools. e.g. assignments, announcement, calendar, chat, content, gradebook, lessonbuilder, news, podcast, syllabus, webcontent, rwiki 
# Default: No filters (all statements processed) 
#lrs.origins.filter=tool1,tool2,tool3
10.0Sakai properties

# Example: tool.categories.append.sakai.announcements=course 
# Default: use the categories defined in the tool xml file 
# tool.categories.append.{toolid}=category1,category2,category3 

## (2) Override the current tool categories with a new set of categories (removes all categories if it is blank) 
# Example: tool.categories.sakai.announcements=course,project 
# Default: use the categories defined in the tool xml file 
# tool.categories.{toolid}=category1,category2,category3

KNL-1031 - Getting issue details... STATUS ## Override/Append Sakai Tool categories 
# NOTE: categories are also set in the sakai tool xml files in each tool 
# Normally, if you want to add a new category (site type) to a tool, you have to change the /tools/toolid.xml file. 
# This config option adds 2 ways to adjust the categories. The first is to append new categories to any 
# already defined for the tool. The second is to override any categories set for the tool with a new set. 
## (1) Append the categories to the existing set of categories (has no effect if it is blank) 
# Example: tool.categories.append.sakai.announcements=course 
# Default: use the categories defined in the tool xml file 
# tool.categories.append.{toolid}=category1,category2,category3 
## (2) Override the current tool categories with a new set of categories (removes all categories if it is blank) 
# Example: tool.categories.sakai.announcements=course,project 
# Default: use the categories defined in the tool xml file 
# tool.categories.{toolid}=category1,category2,category3
10.0Log indisabledSiteUrl = default to blank. If blank, then redirects user to xlogin with warning message. If set, it will redirect to this URL after the disabled user attempts to log in KNL-994 - Getting issue details... STATUS  
10.0Sakai properties# ######################################################################## 
# CONFIGURATION 
# ######################################################################## 

... 

# 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 "${property.name}" 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) 
#config.dereference.on.load.initial=false 
# Default: false (do not dereference all values including those loaded from other sources - e.g. database) 
#config.dereference.on.load.all=true
KNL-924 - Getting issue details... STATUS  
10.0SSL

# Otherwise, the URLs will reflect the attributes of the request URL. (443 | 8443 | or any other port)
# Default: no secure port or protocol (https) will be used, setting this to 0 will have the same effect as not setting it
#force.url.secure=443

KNL-895 - Getting issue details... STATUS  
10.0Mime types

# Turn on mime type detection
# DEFAULT: true (on)
# content.useMimeMagic=false

KNL-101 - Getting issue details... STATUS Useful for downloading files which are missing extensions/file typing from Resources and other tools in Sakai.

 

2.0 New/changed permissions

Release

Tool/Service

Permission

Notes

Jira
10.0Schedulecalendar.options

Permission in the synoptic calendar tool in order to configure if a user has/ has not the rights to edit the options.

SAK-22549 - Getting issue details... STATUS
10.0Chatportal.chat.permittedAllow institutions to prevent certain roles, like guests, from participating in site chat rooms. SAK-23259 - Getting issue details... STATUS
10.0Realmsrealm.view.allAbility to view realms but not modify them. SAK-22585 - Getting issue details... STATUS
     

 

3.0 Stealthed Tools

OSP (Portfolios) is not stealthed, but it the creation of a Portfolio site is off by default. OSP will be removed in Sakai 11 and deprecated to a Contrib tool.

 

 

 


数据库支持

 点击展开

 

The Sakai CLE supports the following production-grade databases:

Database

Driver

Notes

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.

(green star) QA for Sakai 10 MySQL was using Connector/J 5.1.27 and MySQL 5.5.34

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

OJDBC

(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,

(green star) Recommend but not required - convert longs to clobs - SAK-7977 - Getting issue details... STATUS Only tested on Oracle 11.2.0.3 - https://github.com/daveadams/sakai-tools/blob/master/convert-longs-to-lobs.sql . 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

OJDBC

(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

DB2

 

Deprecated

The Sakai CLE have official support for Mysql with production-grade databases, but MariaDB is a binary drop in replacement for Mysql (source : https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility/) and should work with Sakai but it is not officially supported.

Database

Driver

Notes

MariaDB 5.5.x (Not officially supported but works)MySQL Connector/J 5.1.13+

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

Check the Incompatibilities between MariaDB 5.5 and MariaDB 5.3 and MySQL 5.5 to configure your MariaDB server correctly if you want to use the "INSERT IGNORE" parameter:

https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility/#incompatibilities-between-mariadb-55-and-mariadb-53-and-mysql-55

Rutgers University, The State University of New Jersey, use Sakai 2.9.x with MariaDB 5.5 and the XtraDB storage engine (previously MariaDB 5.1 and Sakai 2.9.x)

Source 1 : https://sakai.rutgers.edu/access/content/public/technical.html

Source 2 : http://collab.sakaiproject.org/pipermail/production/2013-January/001962.html

 

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 sakai.properties.

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';

VALUE
--------------------------------------------------------------------------------
AL32UTF8

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 sakai.properties:

url@javax.sql.BaseDataSource
username@javax.sql.BaseDataSource
password@javax.sql.BaseDataSource

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.
username@javax.sql.BaseDataSource=yourDbUserName
password@javax.sql.BaseDataSource=yourDbPassword

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
vendor@org.sakaiproject.db.api.SqlService=mysql
driverClassName@javax.sql.BaseDataSource=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
url@javax.sql.BaseDataSource=jdbc:mysql://127.0.0.1:3306/sakai?useUnicode=true&characterEncoding=UTF-8
validationQuery@javax.sql.BaseDataSource=
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED

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
vendor@org.sakaiproject.db.api.SqlService=oracle
driverClassName@javax.sql.BaseDataSource=oracle.jdbc.driver.OracleDriver
#hibernate.dialect=org.hibernate.dialect.Oracle9iDialect
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
url@javax.sql.BaseDataSource=jdbc:oracle:thin:@your.oracle.dns:1521:SID
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED

(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)
#validationQuery@javax.sql.BaseDataSource=
#defaultTransactionIsolationString@javax.sql.BaseDataSource=
#testOnBorrow@javax.sql.BaseDataSource=false

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 sakai.properties setting auto.ddl.
# establish auto.ddl - on by default
auto.ddl=true
#auto.ddl=false

(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 http://collab.sakaiproject.org/pipermail/sakai-dev/2010-June/008066.html. This issue is solved by specifying the following property in a local my.cnf configuration file:

lower_case_table_names=1

(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 sakai.properties.

(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 http://dev.mysql.com/downloads/. 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: http://dev.mysql.com/downloads/mysql/5.5.html

MySQL 5.1: http://dev.mysql.com/downloads/mysql/5.1.html

Assign a password for the root account:

mysql -u root -pmysqlpassword

5.1 Set MySQL environment variables

 

MYSQL_HOME

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).

Unix/Mac:

export MYSQL_HOME=/usr/local/mysql

Windows:

set MYSQL_HOME=C:\mysql
PATH

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

Unix/Mac:

export PATH=$PATH:$CATALINA_HOME/bin:$JAVA_HOME/bin:$M2_HOME/bin:$MYSQL_HOME/bin:$PHP_HOME/bin:$SUBVERSION_HOME/bin:$USR_LOCAL/bin

Windows:

;C:\mysql\bin

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:

Scope

Location

Override

global

/etc/my.cnf

 

server-specific

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

global

user

~/my.cnf

global, server-specific

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

[mysqld]
default-storage-engine=InnoDB
lower_case_table_names=1

(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.

已知问题

 点击展开

Tomcat - please use Tomcat 7.0.65 .  Tomcat has a bug that should be fixed in release Tomcat 7.0.68.   See SAK-30173 - Getting issue details... STATUS  
Known issues in Sakai 10

 

Release
Tool/Service
Ticket
Notes
10.3Announcements/Notifications SAK-28955 - Getting issue details... STATUS Plan to incorporate fix in Sakai 10.4. patch available at https://github.com/sakaiproject/sakai/pull/15.patch
10.0Samigo Test and Quizzes  SAK-26292 - Getting issue details... STATUS  
10.0Resources SAK-26294 - Getting issue details... STATUS  
10.0CKEditor SAK-26224 - Getting issue details... STATUS

If you have to use IE (internet explorer browser) with this option you might consider making it IE 10 compatible , but please QA test it before you deploy. Here is the property - 
sakai.X-UA-Compatible=IE=EmulateIE10

10.0 - 10.7Lessons, Oracle LSNBLDR-600 - Getting issue details... STATUS

This issue affects schools using Sakai 10 , the Lessons tool, groups, and the Oracle database. It has been a problem since 10.0. It will be fixed in 10.8. However you can fix your instance of Sakai 10 by applying the following conversion script:

ALTER TABLE lesson_builder_groups ADD (tmpgroups CLOB);
UPDATE lesson_builder_groups SET tmpgroups=groups;
ALTER TABLE lesson_builder_groups DROP COLUMN groups;
ALTER TABLE lesson_builder_groups RENAME COLUMN tmpgroups TO groups;


Major change to events in Sakai 10

 

Release
Tool/Service
Ticket
Issue
10EventsSAM-658 - Update events in assessments ( Closed)Major change to events.


Open Jira tickets

For listings of all open issues see:

Blocker Critical Major Minor, trivial

安全策略

 点击展开

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 sakai-security@apereo.org . Please provide a callback telephone number so that we can contact you by telephone if it is deemed necessary.

INTRODUCTION

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.

REPORTING SECURITY ISSUES

Security vulnerabilities in Sakai should be reported immediately to the Sakai Security WG at sakai-security@apereo.org . 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.

GENERAL POLICIES

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.

SECURITY WORK GROUP

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.

SECURITY DOCUMENTATION

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: http://jira.sakaiproject.org/jira/
Sakai Release page: http://source.sakaiproject.org/release

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., sakai.properties), (2) are considered extremely difficult for attackers to exploit and/or (3), if exploited, are of minor consequence to the operation of Sakai installations.

SECURITY ADVISORIES

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.

SECURITY CONTACTS

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 sakai-security@apereo.org.

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 sakai-security-contacts@collab.sakaiproject.org 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.

此前版本

随着Sakai 10发布,Sakai 2.8正式的社区支持将终止。强烈建议运行Sakai 2.8(或更老版本)的学校升级到Sakai 10或Sakai 2.9。

许可证

Sakai 10使用Educational Community License version 2.0许可证

  • No labels