Project ideas for GSOC 2010

=Welcome=

Welcome Google Code-in Student aspirants (:razz:)!! Please check if you are an eligible candidate for the GCI program.

This page lists project ideas developed by the LimeSurvey Community. These tend to be areas that will get the most support as projects since they have been developed by people who know the project and what it needs the most. However, if you have your own idea for a project discuss your awesome idea with us in our forums, mailing list or at #limesurvey on irc.freenode.net. Then submit your proposal. Good Luck (:biggrin:)

=Project ideas=

Example Format...
Describe the idea here in general terms

Skills

Explain what sort of coding skills would be needed for a student to implement this project

Difficulty

Explain the level of difficulty involved

Probable Mentors

Put your name (and tag) here if you are willing to mentor a student for this idea

LimeSurvey 1: Modularisation of basic functions, that are needed by LSRC
Currently the LSRC is suffering from a lack of experience back in the days I began to implement its features. Unfortunaly some functions tend to become buggy when limesurvey-development takes steps forwards, because the LSRC functions are mostly an adapted copy of code from limesurveys original scripts.

The main Idea is to realize the vital functions (at least: importSurvey and activateSurvey) in a way, that LimeSurvey and the LSRC can use it together and the code have to be maintained only once.

Primary Goals:

- analyse the current differences between lsrc.helper functions and the original LimeSurvey scripts. Especially for activateSurvey and importSurvey

- make a concept on how to realize a modular function from the original script, which can be called from limesurvey and the lsrc (see statistics.php and statistics_function.php in comparison as example)

- modularize the script to a function and build it in.

Secondary Goals:

- modularize insertParticipant or implement new functions, which can be used by limesurvey and LSRC in the same manner.

New functions could be:

- Check token state / update / delete token

- Retrieve individual response (by token)

- Batch retrieve responses, keeping in mind not to generate a timeout on very large response sets (think of a solution)

Skills

PHP, AdoDb/sql, PHP:SOAP

Difficulty

intermediate

Probable Mentors

Tim Wahrendorff (rakete)

LimeSurvey 1: Email bounce tracking & handling of international email addresses
Currently there is no way to process email bounces of invitation or reminders in an automated way. If a bounce is received the administrator has to manually process every bounce - either by finding out a correct email address or removing the participant completely. Additionally it would be great if LimeSurvey could handle International email addressing - although the RFC for this kind of features are still experimental it would be great if we can be ahead of time. Primary goals of this task:

- Create a facility to handle email bounces using various methods. Easier to install methods which run without CRON jobs and with a single email account - more advanced and safer methods which require certain email server setups. Make it quick and easy to configure and handle. Create followup actions in case an email is bounced. Differentiate between bounces and other 'away-messages'.

- Extend the PHPmailer library and LimeSurvey so it can handle international email addressing (including configuration)

Skills

PHP, knowledge of email handling and RFCs, some HTML & JS

Difficulty

Medium

Probable Mentors

Carsten Schmitz (c_schmitz)

Thibault LeMeur (lemeur)

LimeSurvey 1: File Upload question type
The idea is to have a question type in LimeSurvey1 where survey participants can upload one (or more) files. Often in surveys the participant is asked to create some content (pictures, movies, documents, etc.)  to upload as an answer to a question. The following goals are  primary in this task:
 * Easy handling for the participant (uploading one or more files should be a piece of cake - also removing files if accidentally the wrong file was uploaded)
 * Extensive configuration options for the question type like
 * How many files are required, minimum and maxim number of files,
 * maximum/minimum upload size,
 * Allowed file types
 * Safe!! storage in the file system, checks for file contents
 * Implementation in statistics / data entry / printable survey / response browsing / response editing & RemoteControl
 * Administrator can download one or more files (zip-packaging files for download) from one response and across responses
 * Provide possible hooks for third party processing tools

Skills

PHP, jQuery, AJAX - existing knowledge on the general idea and related security would be of big advantage

Difficulty

Medium

Probable Mentors

c_schmitz (Carsten Schmitz)

LimeSurvey 1: Authentication framework
The idea is to design and implement a generic authentication framework for LimeSurvey 1 as well as some authentication modules. The Authentication framework will make it possible to implement any kind of authentication backend apart from the already existing internal-DB and Web server delegation schemes. Currently authentication is only used for the survey-administration GUI and not the participants interface (tokens are used for this). With the new authentication framework it will be possible to define several authentication backends and use some of them for participants-authentication.

The generic authentication framework must define the following services:
 * User authentication: this interface must return the identity of the authenticated user if authentication is successful.
 * Authentication may not always be based on a simple user/password form, so the proposed framework must be generic enough to enable authentication based on other schemes (using any numbers or GET/POST parameters or any other contextual parameter such as Referrer, session variable...
 * User provisionning:
 * when activated on the survey administration interface, an authentication module might be able to create a newly authenticated user into the LimeSurvey internal DB (which is required for setting the user rights on the platform). The newly created user can be assigned a default profile or a per-user profile (queried from an external database).
 * when activated on the participants interface, the authentication module will provision the token table of the correspoding survey (only if the token for this user has not been already added).

The already existing authentication schemes will be ported to the new framework (internal-DB and Web server authentication delegation) and at least a new one will be implemented (openID, CAS, Shibboleth).

Skills

PHP, SQL, Authentication protocols (openID, CAS, LDAP-bind, ...)

Difficulty

Medium

Probable Mentors

lemeur (Thibault Le Meur)

Want to know more

Please read the FAQ about this project

LimeSurvey 2: Db Storage Engine
Develop an extensible plugin survey storage engine for LimeSurvey 2.

Description

Other than survey design, everything that happens in LimeSurvey centres around the ability to save responses to questions to a database, and retrieve the responses again when required. Historically these functions have been incorporated within the various functions of LimeSurvey and this has locked LimeSurvey to a single methodology for data storage and retrieval and made future modifications and improvements difficult if not possible.

For this project we are looking for students to write a 'middleware' that exposes abstract high-level functions to LimeSurvey 2 (e.g.: storing these answers related to this question, running statistical analysis etc.) but is built in top of Cake's 'low-level' operations (such as find, save etc). The aim is to abstract away from a specific DB implementation and provide an intuitive and rich API for LS2.

Rationale

Because the interface with the data storage system is so critical to practically every other function in LimeSurvey we want to develop a stand-alone module that is transportable and extensible for the future. And by keeping the logic of data and survey storage separate from the rest of LimeSurvey&rsquo;s functions we will the ease with which LimeSurvey can be developed in the long term.

Implementation

This is such an important project that we would consider multiple students undertaking the task. In conjunction with a strong understanding of data structures, php coding and api principles the students would also have to display a capacity to work in a team and with the broader community.

The implementation would focus on becoming a plugin/addon module under CakePHP which uses the default CakePHP database systems to the absolute minimum. In a well implemented version of this proposal only simple SQL inserts, queries and updates would be required. All other logic would be managed by the engine.

Requirements & Considerations

The DB Engine must be able to do the following
 * ease development of additional question types, which will be developed as plugins
 * efficient data retrieval, especially summaries (e.g. display 100 last responses)
 * support generic data storage and retrieval - aside surveys, imagine running online admission tests, polls, sign-up forms, volunteer campaign etc. etc.
 * easily support conditions, looped question, or generally, non-linear data. Think of a survey that asks how many children you have and then asks information about each of them.
 * support questions that have multiple answers and multiple types of answers. Think of a question asking "What is your favourite ice cream?", offering 3 fixed options and last one allowing user to enter a custom answer.
 * support survey resuming (where applicable)

Use Cases

Think of these when writing your proposal
 * 1) Questionnaire which has a special section displayed only if a user answers a chosen question in a specific way (i.e. branching)
 * 2) Question on your favourite ice-cream, with an option "Other", upon which the user will be asked to enter his own choice (i.e. multi-datatype question types)
 * 3) Questionnaire, which asks how many children you have and then loops a set of predefined questions that many times. (i.e. looping)

Your proposal

Your proposal needs to be fairly detailed and must dig deep down to the implementation level, with good analysis of the performance. "Read the data from the user and store it in the database" is no good! How are you going to store it? What is the schema going to be? Does it satisfy the requirements, for branching, conditions, pluggable question types? Does it scale well? Is it efficient - what is the time complexity? Can I get summaries out of it in a reasonable time? All this needs to be addressed. Early submissions are accepted by both mentors and suggestions and comments will be given (:wink:).

Field Naming and Database Extensibility Methodologies

An ongoing debate in the LimeSurvey community has been the method in which the database stores survey results. In LimeSurvey 1 a flat database schema was used whereby once the survey designer had finished setting up the survey a database table was created with a field for every individual question/answer combination. The advantages of this database schema were speed of retrieval for reporting and exporting and searching. The disadvantages were that the survey system had to &lsquo;freeze&rsquo; the structure in place once the table was created (therefore the activate/de-activate rules in LimeSurvey 1). The single table method doesn&rsquo;t allow easy storage of metadata for individual question/answer combinations (such as timestamps). Nor does it lend itself to surveys with enormous quantities of question/answer combinations – sometimes running up against database limitations regarding the number of fields per table.

An alternative is a &lsquo;normalised&rsquo; database topology where a single table is created to store all survey responses – one database row per question/answer combination. A related table would store metadata that is directly related to the survey sitting/session rather than the answer (e.g.: username, ip address, geographical location, user demographic). The advantage to this methodology is the increased flexibility (extensible) which would allow modification of surveys at any stage even after data has been collected (see requirements). The disadvantages are that searching and compilation of data is complicated and resource intensive.

In a perfect world LimeSurvey would allow users to choose either methodology – either at an installation level or even on a per-survey level.

Having a database storage engine effectively acting as an API would allow this functionality to be built, but the choice of database topology would be invisible to the related LimeSurvey functions that require data.

Skills

PHP, CakePHP, Database Schema Design, Sound knowledge of Algorithms and Data Structures

Difficulty

High

Probable Mentors

jasebo (Jason Cleeland)

macduy (Mac Duy Hai)

LimeSurvey 2: Template Editor
LimeSurvey 2 needs a nice and powerful template editor so everyone can create a template which matches their requirements.

Skills

One needs to know about the details of the dwoo template engine which is used at LS2. There is some cakePHP coding needed to create an interface and write changes to the template files as well as some HTML/CSS to create a nice interface.

Difficulty

You don't have to create difficult algorithms for this task. It's useful if you have worked with templates for another web-application or take a detailled look at how templates work in LimeSurvey. Some design/usability background would be nice but is not a must.

Probable Mentors

Mazi

LimeSurvey 2: Mini-projects
Mini-projects is a collection of small-to-medium sized projects, which you mix-and-match according to your tastes. Heck, you can even roll your own idea and once reviewed and approved, you can code away. Some recommended/important mini-projects and their brief descriptions:
 * Smarter installer: LS2.0 comes with its own installer, though it may not be the friendliest to use. Your task is to make it juicier to use:
 * Resume installation - if the user aborts the installation mid-way, make it easy for him to resume it. It should be able to clean up databases, revert files and basically be prepared for any eventuality.
 * Better error handling - meaningful error reports, suggestions how to fix them: e.g. "Database does not exist" is better than "Database error" (and excellent opportunity for a "Would you like to create it?" button)
 * Customization - invite the user to customize his installation of LimeSurvey - from security settings such as salt, to interface such as the header title.
 * User management: When the number of users grow, it becomes increasingly harder to manage them. Implement functionality and provide interface for features that would make this task easier. Inspire yourself by the big players, such as the infamous you-know-which-one social website.
 * Groups within groups: LS2 users can belong to a group, but groups cannot belong to other groups.
 * Contact lists: There is already something called AssignmentGroups. Study this concept carefully and generalize to a Contact List
 * GUI: Design a GUI which allows you easily manage users, groups and contact lists.
 * Searching: Provide an efficient but simple-to-use search interface and functionality
 * Batch import: import users through CSV, XML, etc...
 * Batch processing: Add an interface to manipulate (add & modify) several users at once
 * Announcements: Make it easy to send customizable announcements to desired audience. Obviously, you don't want to send reminder e-mails to those people who've taken a survey already.
 * Filtering: Filter users on various suitable criteria
 * Templates: Design a template system announcement beyond a simple find-and-replace. We don't want you to build the next Smarty or Django templates replacement, but dazzle the users with something cool and usable
 * Management: Folders, counters,
 * Inbox: Build a system that would allow users to communicate among each other without the need for e-mail. (Not chat)!
 * Message Type: Categorise the messages
 * Linking with Announcements: Use it as an alternative to e-mail.
 * E-mail notifications: Is it a good idea? How often is good? Allow people to choose if they want it?
 * Assignments: Assignment is how a Survey is deployed. It can be time-restricted or region-restricted etc. Make improvements on the Assignment features and its design GUI.

Skills

PHP, CakePHP, JavaScript & jQuery, Creativity, UI Design

Difficulty

Moderate

Probable Mentors

Mac Duy Hai (macduy)

LimeSurvey 2: Template/Theme Editor - This project has no mentor!
The idea is to develop a theme / template framework similar to one in jquery | Jquery Theme Roller and thus making the UI design of the surveys easier.The current template editor is based on dwoo template engine which actually loads the files exposing the css etc for us to edit, which of course require some skill set to proceed. Using this template editor we can make everything UI based and thus requiring no developer skills to edit the templates.

The overview of the modules can be seen here:



It&rsquo;ll be implemented using Jquery to use the more advanced UI experiences.(:biggrin:)

The following mock-up will give us a better view:

Moderate

Skills

PHP, CakePHP, CSS, AJAX, JavaScript & jQuery.

Difficulty

Moderate

-LimeSurvey 2: Lime Survey Social - Facebook Application - This project has no mentor!
The idea aims at developing a Facebook app which gives a social touch to LS 2.0. The application will be integrated in several Facebook integration points like News Feed, Applications boxes, Wall etc so that the user participation will be more. Adding a social touch can drive us more user participation and increase the popularity. The ability to control the Facebook app can be provided in the LS2.0 Admin Dashboard and also in the FB user application window with varied options.

The facebook has the following modules (we can add more. This is primary draft.)
 * All Survey related core features. (Create, Edit, Delete, Administer etc)
 * Gain reward points.
 * Use reward points to create more surveys.
 * Spread the surveys ...... and more

The idea can be extended to other social networks



The mock-ups :





Skills

PHP, CakePHP, Facebook API.

Difficulty

Moderate

LimeSurvey 2: Integration of Poll Questions This project has no mentor!
Polls are one of the most popular and quick response getting tools once can use. Implementing polls in LS 2.0 will be an added advantage. Since every one of us know what polls are about, this idea focuses on the implementation part.

The idea is to integrate the ability to create a POLL Module in Admin dashboard, where he can administer (Create | Edit | Delete | View Responses etc) the Polls.We can even get feedback "about the survey" at the end on how the user feels by creating a custom poll (we can even redirect the user to this poll).
 * Chat Bots and Polls: An another idea is to create chat bots so that whenever we create a poll, all the friends (who added the bot) of that bot will be pinged by the question followed by options. Getting an answer is very easy (Bot friends just need to type a single letter stating the answer) and its a push model which ensures the delivery to everyone (even offline).We can even extend this to deliver certain type of surveys question by question through the bot.

A simple mock-up for this:


 * Alternate Solution: An alternate solution provided by Mazi is clubbing this idea with the Facebook app idea. Instead of porting parts of the admin backend to facebook or other social networks we'll have options in Admin panel to "publish as: common survey |mobile device survey | facebook poll | homepage poll |  ... etc " Everything will be put together at the usualm admin backend but you can choose which way(s) you want publish your survey.

We can further extend this idea by giving additional options to publish as widgets for websites and blogs etc.

Skills

PHP, CakePHP, XMPP Protocol (Knowledge of developing bots), Knowledge of Polls.

Difficulty

Moderate

LimeSurvey 2: Survey Community Project
Build a system for LS2 that connects to a central repository of survey resources, such as demographic questions, answer styles and templates. Integrating with a login system, allow LimeSurvey users to easily publish their work to a community resource or use other published works from the same location.

For many finding already written question texts, or standardised demographic questions would really simplify their use of a survey tool. LimeSurvey could leverage on the community spirit of an open source product and encourage users to share their own work. By integrating a "Publish to the LimeSurvey Library" button in the administration system with questions, or templates, or anything else that can be shared, LimeSurvey could develop a library of tools that simplifies Survey Creation even further.

Skills

PHP, CakePHP, Web and User Interface Design Skills

Difficulty

Moderate

Probable Mentors

Jason Cleeland (jasebo)

LimeSurvey 2: Condition Engine


Build a system for LS2 that will let survey administrators design, store and evaluate conditions. Conditions can be used in several features such as question branching (survey logic), assessments, quotas, ...

This projects will at least end up with:
 * A working GUI to design complex conditions:
 * several atomic conditions can be combined by AND or OR logical operators and will support for grouping conditions with parentheses
 * an atomic condition representation can be


 * an atomic condition editor will implement
 * several operators (equality, inequality, string-comparisons, numerical-comparisons, regexp),...
 * meta operators surch as 'Not displayed'
 * left and right operands can be answers from previous questions, or a static values. It should be extensible so that we are able in the future to use more complex operand such as the result of a specific function (for instance the sum of some previous integer questions)
 * A working DB storage backend using a string in RPN (Reverse Polish Notation) to describe each condition
 * A first version of the evaluation of conditions for the question branching feature. This part will require interaction with other parts of the projects (Survey Engine, and DB engine).

Skills

PHP, CakePHP, JQuery and User Interface Design Skills

Difficulty

High

Probable Mentors

Thibault Le Meur (lemeur)

Want to know more

Please read the FAQ about this project

=We want your ideas!=

What floats your boat? Do you have another idea that gets you excited? Discuss your ideas in our forums, mailing lists or at #limesurvey on irc.freenode.net.

=More Information=

LimeSurvey Google's Summer of Code 2010

 * LimeSurvey GSoC 2010

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

Getting Started

 * How to get started with LimeSurvey's GSoC

How to Get Started With LimeSurvey:

- setting up the development environment, coding standards, and all the other important stuff that you need to know before the real fun begins!

Frequently Asked Questions

 * Google's Summer of Code Faqs
 * LimeSurvey's GSoC Faqs