Moodle 2.x过滤器不能正确链接中文活动名的补丁
补丁在此。
Moodle 2的过滤正则只考虑了欧洲语系带注音的字符,没有考虑亚洲的不用空格分词的语言,导致过滤器失效。这个补丁能解决亚洲语言的问题,但也让欧洲语系失效。两全其美的解决方案我不知道,因为我不懂欧洲语系的正则,就像Moodle开发者不懂中文正则一样。
孙志岗的博客
Posts tagged ‘moodle_dev’
补丁在此。
Moodle 2的过滤正则只考虑了欧洲语系带注音的字符,没有考虑亚洲的不用空格分词的语言,导致过滤器失效。这个补丁能解决亚洲语言的问题,但也让欧洲语系失效。两全其美的解决方案我不知道,因为我不懂欧洲语系的正则,就像Moodle开发者不懂中文正则一样。
项目主页、下载地址、安装说明等都在:https://github.com/hit-moodle/moodle-local_onlinejudge
它并不是1.x的简单升级,而是完全的redesign,和近乎完全的recode。主要改进:
暂时还未完成的1.x的功能包括:
1.x用户将moodle升级到2.0后,可以直接升级online judge 2.0,原有作业都会被继承保留。
欢迎测试!发现任何问题,有任何意见和建议,都请在项目主页的issues中提出。多谢!
另外,后续版本的发布可能不会再通过博客等媒体宣布,请在github上watch本项目,以便随时了解最新动态。
再另外:
最后:诚征志愿者帮我们解决各种issue,详见《志愿者指南》
在提交了剑晖的#1142贡献后,Moodle 2.0中文包的翻译率终于达到了80%,冲入第一阵营。记得去年9月份翻译协作网刚开通时,只有50%多一点儿翻译率。半年多的时间,326次提交,15位志愿贡献者,完成了大量的翻译和修订工作。贡献者名单如下(排名不分先后):
感谢他们!期待100%时,贡献者名单里能有您的名字!
cms以前用的是email认证,用户自己填个人信息。过程繁琐,信息不准,相当折腾。偶然获知信息处正在做统一认证平台(CAS),就联系了一下,他们也正希望能有其它IT系统融入,所以一拍即合,相当融洽。
Moodle本身就有CAS认证插件,认证后从LDAP获取用户信息。配置起来并不复杂。两个比较好的参考:http://docs.moodle.org/en/admin/auth/ldap,https://mediawiki.middlebury.edu/wiki/LIS/CASifying_Moodle。
比较复杂的是和旧账号的兼容。如果能有明确的旧账号和CAS账号的对应关系,那么只要修改Moodle的user表,把username改成cas的用户名,auth改成cas就行。一个脚本,甚至几条sql语句就能搞定。
可惜我们没有这样的对应关系,必须让用户自己设定账号绑定,所以有了这个项目:https://github.com/hit-moodle/bind_cas_users。它先引导用户在CAS登录,然后让用户输入旧用户名和密码,验证通过,用户确认后,修改user表,使username为CAS用户名,auth为cas,这样用户以后直接从CAS登录就能完全继承旧账号的一切了。
这里有个难点,就是假如旧用户名是user1,CAS用户名是user2,而Moodle还有一个用户名是user2的用户。如果user1在user2之前做绑定,那么无法修改username。
解决方法是把所有旧用户名统一加上后缀“.local”(先要确认没有用户已经用过这个后缀),本地验证时自动在用户输入的用户名后加上“.local”。这样改username就不会发生冲突。下面这条SQL语句就是做这个的
提前若干天发出账号切换通知,让大家先去CAS激活账号,同时在小范围测试账号绑定程序。
在直接用cas登录时,假如moodle中并没有该用户的记录,会直接创建一个新用户。这导致,如果一个cas登录了的用户,没有去做账号绑定,直接点击了cms的任意要求登录的页面,那么他就在cms中有了一个和cas对应的新账号,而旧账号无法和新账号绑定了。这个问题的解决靠下面这个补丁:
挑一个夜黑风高的晚上,关站完成以上过程。大家一觉醒来,就都必须都用CAS登录了。
Moodle的cas登录插件还兼容其它登录方式。在其配置中设置好后,在登录界面会显示两个选择:CAS登录、其它登录。因为cms还有很多校外用户,以及cas中还没有考虑校园访客的情况,所以我们保留了原有的email认证(用户名加了后缀)。CAS登录会先判断用户是否已经在cas中登录了。如果是,就直接以其身份登录;如果否,才显示选择登录方式的界面。
另外,auth/cas/cas_ldap_sync_users.php是需要放在cron中的脚本,但没有转换完所有账号前千万不要运行。它会直接在moodle创建ldap中的所有用户,而不会进行任何账号关联操作。一旦运行,再想让用户能继承旧数据就比较麻烦了。
这一周的主题,就是Moodle 2.0。
赶在临放假前,将cliff调好的服务器送入了网络中心,指导服务器的技术支持人员将其成功上架。因此错过了科研研讨会第一天精彩的下半场。
科研研讨会第二天中午接到数学系一名教师的电话,于是前去介绍Moodle,就又错过了第二天精彩的下半场。但愿这趟没白跑吧。
将老cms上的数据库和用户文件拷贝到新服务器。太多零碎文件了,打包和解包都耗费了数个小时。传输按理说应该很快,但一个机房里都是千兆接入的两台机器平均速度还到不了10MB/s……
1.9升到2.0勉强算顺利,遇到一个bug,但官方旋即就修正了。
开始测试和开发:
git和github.com真好用啊!!!!
另外就是moodle 2.0的翻译工作。把中文包的翻译率从70%提升到了73%,大概新翻译了有500多条吧(感谢王帅朋友贡献的5条),修正的也好多,数量就没有统计了。
做这些很有成就感,很快乐,欲罢不能。但下周不能再干这个了,得写tmd的论文了,还有tmd的NSFC,过tmd年,开始tmd的生活。TMD!
2.0是Moodle历史上最大的一次升级,已经发布了RC1版,期望一个月后能正式发布。现在moodle.org就在运行Moodle 2.0,说明它已经能在开发人员的监管下稳定工作。
目前已经有三个可以公开访问的运行2.0的网站,除了moodle.org,还有lang.moodle.org(Moodle的协同翻译平台,注册后就能参与),和qa.moodle.net(公测网站,每个人都可以用管理员、教师或学生身份登录)。通过使用这三个网站,以及Release Notes,对Moodle 2.0已经有了一些感受。
视觉上的主要变化是更漂亮和方便了。2.0官方提供的主题风格的数量和质量都有很大的提升,而且主题本身还可以提供个性化的功能。比如版块不再是只能傻傻地贴在页面上,用户可以把它放到一个停靠栏里,需要的时候才弹出来,很节约空间。
“导航版块”能让用户非常方便地直接进入不同课程的不同活动。“设置版块”有上下文感知能力,会根据你所处的位置不同自动变为最相关的选项。
旧的HTML编辑器被抛弃,换用TinyMCE。它不仅对各种浏览器的支持更好,排版功能更强(比如支持layer、CSS自定义),而且支持可视化的公式编辑,这个太有必要了!
旧的基于目录的文件管理被“容器”替代。从用户角度看,当需要使用文件的时候,只需从它所在的容器选择它。容器的种类很多,可以是自己上传的文件和目录,也可以提供一个url让moodle自己下载,还可以是从Google Docs、DropBox、Youtube等导入。当然,最主要的导入功能在中国是别指望用了。所有导入的文件都会自动和文件源保持同步。从开发者的角度看,文件不再是以目录、子目录的形式组织,而是被后台用hash一类的方法管理。好处是重复的文件会只有一份,缺点是不能再通过直接访问文件系统来处理文件了。
“活动完成状态跟踪”和“条件”对授课会很有帮助。它可以强制要求学生必须先做完某件事,才能再做另一件。比如,必须先参加一个投票,才能提交某个作业;完成作业1,才能做作业2;如果作业1得分高,可以做作业2,否则做作业3……。这个功能亦扩展到课程级别,从而开始支持先修课。
“反抄袭”功能有了内置API,既可以通过插件的方式扩充多种反抄袭手段,也让任何功能模块都可以调用反抄袭的API。看来与抄袭的斗争已经是世界性的了。
“信息反馈”模块第一次成为标准模块。用它可以自定义各种形式的调查问卷,而不像旧的“问卷调查”模块只能设置固定的几个问题。
表面的主要变化并不是很大,最重的都在后台。比如开始支持Web Service,这使得Moodle可以更好地和其它系统交互,也更便于移动客户端的开发;“备份和恢复”功能完全重写;Wiki完全重写;Workshop完全重写……
后台的变化意味着它需要更多的测试。估计一年以后俺的乐学网就可以升级到2.0了。在此期间,得把在线评测和反抄袭做个移植。因为底层的变化太多,这个移植动作实在不小,有兴趣的欢迎加入开发!
当了解到这些隐藏功能后,我不得不对Moodle的喜爱又增加了一层。本文慢慢搜集它们,持续补充。
隐藏功能是那些在moodle界面中找不到,必须手工在地址栏输入url才能使用的功能。本文后面只给出每个url相对于moodle root的部分,比如“/foo/bar.php”意味着应该访问“http://www.mymoodle.com/foo/bar.php”。
/admin/dbperformance.php
/admin/innodb.php
因为MyISAM不支持事务等缺点,从Moodle 2.0开始,InnoDB将成为官方推荐的格式。详情可以参考MDL-23682,moodler们对MyISAM的态度几近于愤怒。
/admin/health.php
自动检查系统潜在的问题,并给出建议性的解决方案。这个很值得每隔一段时间就用一用。
/admin/replace.php
对整个moodle数据库进行文本搜索和替换。比如网站更换了域名,就可以用一下这个。
把所有发出的email都重定向到一个log文件中。
脚本在/admin/mailout-debugger.php,但它不是从浏览器里访问的。它的注释详细说明了使用方法。
/userpix/index.php
新特性:
下载请到:http://code.google.com/p/sunner-projects/downloads/list
这个版本最大的改进是不再延迟评分,而是实时评分(由计算机学院06级学生刘琦卿开发)。此外增加了把编译警告视为编译错误的功能,可以帮助学生养成更好的编程习惯。再就是一些安全增强和小修补。
该插件的详细介绍在:http://code.google.com/p/sunner-projects/wiki/OnlineJudgeAssignmentType