GSOC09 conditions project

From LimeSurvey Manual


Welcome to Google Summer of Code 2009 "Conditions" Project Page. This project page will be used and maintained over the summers to show the status and progress of the Conditions project.

Project Proposal

Title: Implement Condition Handling into LimeSurvey 2

Abstract: Condition handling is one of the powerful features in LimeSurvey 1.x which LimeSurvey users will love to see in LimeSurvey 2. Conditions let the user to display only those questions if certain conditions are met. This helps user to better design their surveys and gives flexibility to the survey takers to enter only the data required to be entered by them.


1: Please complete the following information:

(if you can't answer any, enter 'none')

Your Name: Amit Kumar

Your Email: amit8(DOT)88(AT)gmail(DOT)com

Your IM and user id (): ie: Skype, amit8_88, irc: amit8-88, AIM: amit8(DOT)88(AT)gmail(DOT)com

2: Please detail your project proposal

As discussed with the mentors, I plan to implement condition handling in LimeSurvey 2. The conditions in LimeSurvey will be implemented with a different design model than the one used in LimeSurvey 1. My aim would be to take care of the limitations and workarounds in LimeSurvey 1  while designing conditions for LimeSurvey 2.

Following Issues will be kept in mind while designing conditions for LimeSurvey 2:

  1. Conditions will be made as modular as possible in LS2 so that it can be easily extended to be used on more powerful features like conditions on sums on previous answers.
  2. Enable flexibility to add meta operators.
  3. Tightly integrate conditions in question handling.
  4. Have a check for mandatory questions so that users do not get message to answer a question that has not been displayed.
  5. Implement conditions on both server side as well as client side, using jQuery for client side.
  6. Design two modes of GUI for Conditions handling, one for simple users, second for advanced users.

Future Plans:

   *Implement User-defined functions

   *Implement Conditions on tokens, quotas, assessments

   *Fix bugs and provide support to the LimeSurvey Community

3: How will LimeSurvey benefit from your proposal?

Condition Handling in LimeSurvey 2 will help users create better survey models by exploiting better and enhanced conditions model in LimeSurvey 2.

This project will give a platform to the conditions handling upon which many powerful features (see Future Plans)can be implemented during and post GSoC.

I am sure, LimeSurvey Community will enjoy these features and benefit from my efforts.

4: Please detail milestones and deliverables for your proposal:

The deliverables of the project include:

   * Screen Mockups : Two modes, one for simple users and advanced mode for advanced users. The surveygizmo page skipping screenshot 2 can be of much help.

   * Design and produce UML for a generic design so that other features can be easily implemented in future.

   * Produce a generic condition designer implemented in LimeSurvey 2.

   * Document the code for future reference.


10 May - Produce Screen Mock-ups

27 May - Produce UML and Use Case Diagrams

6 July-  Finish Implementation of Simple Conditions and fill Mid-term evaluation

6 August- Finish Implementation of Complex Conditions

10 August - Produce System documentation

17 August - Submit Final Evaluations

I have divided my summer into three time-frames  and I will work accordingly. The Roadmap of how I plan to do the project is as follows:

First Trimester (20 April- 22 May)

   * Learn how questions are implemented in LimeSurvey 2.

   * Learn the principles of UI

   * Create Screen Mock-ups for both simple users as well as advanced users.

   * Brush up jQuery and cakephp concepts

   * Start work on Conditions system flow and UML

   * Document the progress and present a weekly report to the mentor.

Second Trimester (23 May - 6 July)

   * Finish-up the UML design and seek advice/comment/suggestions from the mentor and other developers. Keep Design issues in mind while designing.

   * Create conditions designer screen

   * Implement the simple conditions based on the design

   * Test the conditions

   * Document the progress and present a weekly report to the mentor.

Third Trimester (7 July - 10 August)

   * Implement complex conditions (meta operators) based on the design.

   * Test the conditions.

   * Document the progress and present a weekly report to the mentor.

   * Start implementing conditions on user defined- functions.

5: What Open Source Development Experience do you have?

I started using Open Source Softwares three years back but I actually started contributing a year back when I showed my interest in becoming a LimeSurvey developer. I worked on the i18n and l10n of LimeSurvey 2.

I also test the syslinux project in my free time.

Apart from Open Source Development, I spread the love for FOSS and motivate people to

   * Use FOSS tools

   * Use LimeSurvey for data gathering and survey taking

   * Install and Use Linux

   * Teach them coding under Linux environment especially C and PHP

6: Other coding, work or related experience:

I know PHP, Cakephp, mySql which is required for this project in LimeSurvey 2. I am a beginner to jQuery which is very nice javascript library and is easy to learn and powerful to implement.


   * Summer Internship at BlueWhale Labs - Developed a dashboard to help the project managers track current the status of the projects. It was developed in PHP, mySql in 2007

   * Customized PHPSurveyor: Integrated score management system into PHPSurveyor in 2006

7: Academic Experience:

I am a full time student at APIIT SD INDIA affiliated to Stafford Shire University, UK . I am pursuing B.E Hons in Computing. Currently I am in 8th semester and in about 20-25 days, I will be a graduate. I learnt a lot being at college and had fun.

I have worked on following projects at my college:

   * Linux Live CD Kiosk for taking Quizzes/Information Providing - developing the live cd from scratch as an individual project. Using shell scripts, isolinux and customized kernel for Live cd and PHP/mySql for Quiz / Information providing.  It is a eight month project (August 2008-April 2009)

   * Online Banking System - Developed in PHP, MySql as an individual project. It was two months project (Jan 2008- March 2008)

   * An online DVD/CD rental web application -  Developed in PHP, mySql as a group project. It was a two month project (Jan 2008- March 2008)

   * Disaster Management System (inspired by Sahana)- Developed in ASP, MS ACCESS as a group project. It was a two month project (August 2006-October 2006)

Apart from these projects and languages I have also gained knowledge in Project Management skills, soft skills which I believe is very helpful while working in a team.

8: Why have you chosen LimeSurvey?

I have been using LimeSurvey for the last three years and I understand the codebase very well. I believe LimeSurvey is a great survey taking tool and I want to use my skills in making LimeSurvey 2 a wonderful experience to the users.

9: Personal Availability

My university exams end on April 26 and I am available after that for the whole summer. So I have enough time to invest on LimeSurvey this summer. I have seen the Important Dates and timeline on the GSoC website and can confirm my availability to it.

10: References

 *LimeSurvey Documentation on Setting Conditions at

 *Surveygizmo Screenshot on Page Skipping at editor_page_logic_big.png

Action Plan



The notes for the Conditions Project are taken at Condtions Notes Page

More Information

LimeSurvey Google Summer of Code 2009

An introduction to LimeSurvey and our application for this years Google Summer of Code

Other Project Pages

Comments On Conditions Project

Your valuable comments/suggestions are welcome here:

Conditions is indeed one of the most important features of LS. In my opinion, LS2 could be a great opportunity to not only duplicate the existing LS 1.x conditions feature, but also to improve it. With that in mind, let me suggest that the new conditions feature in LS2 should handle random assignment.

In experimental research, participants are randomly assigned to conditions. In the limesurvey framework, this means that two (or more) versions of a question exist, and each participant is randomly assigned to view only one of them. I am currently implementing this in LS 1.x by 1) creating a hidden question, 2) using javascript to randomly generate a condition number 3) setting the value of the hidden question on the condition number, and 3) setting conditions on the question versions so they are only displayed for the corresponding condition. Please please please bake this into LS2!

Thanks for reading,