2010年08月22日, 11:01 上午
当了解到这些隐藏功能后,我不得不对Moodle的喜爱又增加了一层。本文慢慢搜集它们,持续补充。
隐藏功能是那些在moodle界面中找不到,必须手工在地址栏输入url才能使用的功能。本文后面只给出每个url相对于moodle root的部分,比如“/foo/bar.php”意味着应该访问“http://www.mymoodle.com/foo/bar.php”。
1. 系统管理
1.1 数据库性能监视
/admin/dbperformance.php
1.2 把MySQL数据库从MyISAM格式转换到InnoDB格式
/admin/innodb.php
因为MyISAM不支持事务等缺点,从Moodle 2.0开始,InnoDB将成为官方推荐的格式。详情可以参考MDL-23682,moodler们对MyISAM的态度几近于愤怒。
1.3 体检中心
/admin/health.php
自动检查系统潜在的问题,并给出建议性的解决方案。这个很值得每隔一段时间就用一用。
1.4 全数据库替换
/admin/replace.php
对整个moodle数据库进行文本搜索和替换。比如网站更换了域名,就可以用一下这个。
2.辅助开发
2.1 调试发出的email
把所有发出的email都重定向到一个log文件中。
脚本在/admin/mailout-debugger.php,但它不是从浏览器里访问的。它的注释详细说明了使用方法。
3. 彩蛋
3.1 列出所有上传了头像图片用户的头像
/userpix/index.php
2010年05月22日, 2:13 下午
新特性:
- 支持40余种编程语言的在线评测。新语言的支持来自于ideone.com,这是一个免费的Web服务。所有程序都是在ideone.com运行,所以对您的moodle服务器而言,是相当安全。该功能由刘琦卿开发。
- 因为可以使用ideone.com运行程序,所以从这个版本开始支持Windows了
下载请到:http://code.google.com/p/sunner-projects/downloads/list
2010年05月1日, 4:01 下午
这个版本最大的改进是不再延迟评分,而是实时评分(由计算机学院06级学生刘琦卿开发)。此外增加了把编译警告视为编译错误的功能,可以帮助学生养成更好的编程习惯。再就是一些安全增强和小修补。
该插件的详细介绍在:http://code.google.com/p/sunner-projects/wiki/OnlineJudgeAssignmentType
2010年04月18日, 3:06 下午
这个补丁可以达到下图效果:

补丁下载。打补丁方法:在moodle目录下用命令“patch -p0 < index-by-surname.patch”。注意,“-p0”中是数字0,不是字母o
还要把langconfig.php存入moodledata/lang/zh_cn_utf8_local/中。如果这个目录不存在,就新建之。
2010年04月3日, 4:49 下午
下载地址:http://code.google.com/p/sunner-projects/downloads/list
有很重要的漏洞修补,很多的bug修复和界面改进。比较大的功能提升是在线评测增加两个新功能:
- 设定格式错误(PE)的得分比例
- 重新评测已提交的作业(计算机学院06级刘琦卿同学贡献代码)
2010年03月24日, 2:52 下午
Google Analytics是一个很好用的网站访问数据统计、分析工具。Moodle有一个支持它的版块——Google analytics block。但并不是所有页面都能加入版块。还有一种方法是修改主题(theme)的footer.html文件,但是如果允许课程、用户自选主题的话,就要每个主题都修改,很麻烦。所以我做了下面这个补丁。
Index: lib/weblib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/weblib.php,v
retrieving revision 1.970.2.166
diff -r1.970.2.166 weblib.php
3072a3073,3088
> /// Hack by sunner@gmail.com to include google analytics tracking code
> $gscripts = '
> <script type="text/javascript">
> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
> document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
> </script>
> <script type="text/javascript">
> try {
> var pageTracker = _gat._getTracker("UA-xxxxxxx-x"); //Chang UA-xxxxxxx-x into your own GA id
> pageTracker._trackPageview();
> } catch(err) {}</script>
> ';
> $footers = explode('</body>', $output, 2);
> $output = $footers[0] . $gscripts . '</body>' . $footers[1];
> /// Hack ends
>
2009年10月28日, 9:24 下午
都用GPLv3发布,一个是新作业类型,可以用online judge的方式自动对C/C++代码评分。一个可以从编程与中文文本作业中抓出抄袭的。
http://code.google.com/p/sunner-projects/
2009年09月20日, 10:04 上午
曾经问过moodle的开发者,为什么用户资料中的学号(idnumber)在整套系统中都几乎被忽略。得到的回答是,学号在西方高校属于个人隐私,通过它可以获得一些秘密信息,所以不能随便公开。但中国不是这样,很多的管理都需要通过学号进行。所以,我在cms.hit.edu.cn上设定了注册时强制输入学号。但这个信息只有在看用户资料的时候才能看到,很多时候挺不方便。于是有了这个补丁,它会在学生全名的前面加上学号,例如:(96510103)张三。
Index: lib/moodlelib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/moodlelib.php,v
retrieving revision 1.960.2.137
diff -r1.960.2.137 moodlelib.php
2686c2686
< return $user->firstname .' '. $user->lastname;
---
> $fullname = $user->firstname .' '. $user->lastname;
2689c2689
< return $user->lastname .' '. $user->firstname;
---
> $fullname = $user->lastname .' '. $user->firstname;
2693c2693
< return get_string('fullnamedisplay', '', $user);
---
> $fullname = get_string('fullnamedisplay', '', $user);
2695c2695
< return $user->firstname;
---
> $fullname = $user->firstname;
2699c2699,2705
< return get_string('fullnamedisplay', '', $user);
---
> $fullname = get_string('fullnamedisplay', '', $user);
>
> if (!empty($user->idnumber)) {
> $fullname = "($user->idnumber)" . $fullname;
> }
>
> return $fullname;
不过,并不是所有显示姓名的地方都会把idnumber从数据库查询出来。所以如果想在某个特定地方看到学号,就必须得修改相关代码,select的时候包含上idnumber。
2009年04月1日, 1:33 下午
Moodle内所有的链接都是绝对地址,通过config.php文件中的$CFG->wwwroot定义根位置。这使网站无法支持多域名、多IP。
比如,http://cms.hit.edu.cn的IP是202.118.253.67。为方便被割裂到校园网外的学生访问,现在想给它加一个网通IP,61.167.60.4,绑定在域名http://cms-hit.sunner.cn上。一切都配置好之后,访问http://cms-hit.sunner.cn,再继续点击链接,就都被指向http://cms.hit.edu.cn了。网通IP形同虚设。
解决办法:在config.php文件中加上这样一段代码:
if ($_SERVER['HTTP_HOST'] == 'cms-hit.sunner.cn')
$CFG->wwwroot = 'http://cms-hit.sunner.cn';
else
$CFG->wwwroot = 'http://cms.hit.edu.cn';
也可以干脆直接:
$CFG->wwwroot = 'http://' . $_SERVER['HTTP_HOST'];