Limesurvey是一个比较著名的开源问卷调查项目,GitHub地址:https://github.com/LimeSurvey/LimeSurvey

但由于种种原因,虽然用搜索引擎能够依稀看见很多高校希望使用它来建设自己学校的调查问卷系统,但在国内完成率比较低下。在我开发之前只看见上海交通大学完成了自己的二次开发,并且接入了自己学校的统一身份认证系统,除此之外,南京大学也打算做这个东西,然而过去了两年,好像还是没有完成开发。

猜测,国内比较滞后的原因有以下的两年:

1、调查问卷系统属于校园的非核心业务,能够利用第三方系统(问卷星等)解决问题,再利用iframe进行网页的嵌套,完全没有自己花钱开发的太大必要。

2、国内Limesurvey的参考资料特别少,甚至连如何去使用的文档都特别少,更不用谈是开发文档。 由于大多是英文文档,国内使用比较迟钝。

高校进行开发,主要是两个问题,一个是接入自己的全校身份统一认证系统(大学学校使用的是开源的CAS系统),其次就是改变他自己的非现代风格样式。

Limesurvey是用PHP+多种数据库进行开发的。使用的框架是某个版本的YII(估计还经过自己的改造),变量比较多,代码量也比较大。

样式问题比较简单,一般情况下可以修改他比较原始的表格布局,替换成现代的DIV布局。或者直接修改CSS样式即可。但并非所有能看到的东西都是通过模板渲染引擎来实现的,有很大的一部分是在自己控制的类里面echo直接输出的。

比较重要的是接入CAS认证系统,基本上可以分为两个部分:

  1. 利用CAS系统进行后台的登录,登录后可以发布调查问卷

  2. 针对发布的调查问卷做一定权限控制。最为基础的就是把调查问卷分为两部分,一部分填写调查问卷需要进行CAS的认证,一部分对所有的人进行开放。

具体的实现可以参照上海交通大学的问卷吧系统。

利用CAS系统进行后台的登录

limesurvey系统对用户的要求主要有ID, name, email, password. 这些东西除了password之外基本上CAS的attributes都可以以一个数组的形式进行提供,如果提供不了就可以和password一样处理,即符合他要求的格式即可(比如哈尔滨工业大学的无法提供email, 可以给每个账户的默认email是学号@hit.edu.cn)

我们需要做的首先是在配置中打开 authcasautocreate_permission, 具体可以参见config-default.php中的配置内容。网址:https://github.com/LimeSurvey/LimeSurvey/blob/master/application/config/config-defaults.php#L187 ,一般情况下开启create即可实现自动创建用户的权限

然后就是创建用户的东西了:

大体上是在登录之前进行检测是否登录(参见官方提供的SDK),在没有登录的情况下跳转到CAS服务器,然后跳转回来的时候即可获取到CAS服务器提供的一些基础信息。然后对新创建的用户进行一些设置。

实现起来不是特别的复杂。更为重要的事,有人已经关于这个问题进行过相关的开发,并且有一个插件,你只需要进行简单的修改就可以实现登录登出这一块的问题了(在我的帮助下,现在已经兼容最新版的Limesurvey);

插件地址:https://github.com/univlorraine/limesurvey-cas

用CAS控制调查问卷的访问权限

Limesurvey在设计的时候就已经考虑过类似的问题,即不是针对所有的人都开放调查问卷。具体的内容是在后台的“发布与访问控制”中“使用验证码”来控制码。

这个原始的功能就是为了防止机器等暴力填写调查问卷,而出现了验证码这一操作,在设计上很符合接入CAS统一认证。

如此,我们只需要替换相关的代码。即把之前的验证码相关的代码替换成CAS部分即可对问卷的访问权限进行有效的控制。

 

写在后面:

正如本文所说的一样,本文只是提供一下开发过程中遇到的问题的大体解决思路,并不涉及如何去二次开发这个过程。

如果你恰巧也在进行这个开发,有什么问题欢迎在评论中指出。

原文地址:http://life.rccoder.net/php/1092.html


rccoder
1.2k 声望37 粉丝