TOPIC: Survey Statistic without an Useraccount

when ever we set up a survey for a customer - he want's us to report him daily how the participation is developing.
This can be annoying and costly and so I wrote a small PHP application, which provides a detail statistic without the need of an user account.

I want to share the script with you and also discuss, wether you think that could be a useful feature in future versions of limesurvey or not.

There are three key-features:
1. The necessary survey ID's and the title of the project are provide with GET variables so anyone can set up the statistic without the need to adapt the source code
2. The client can see the development with the help of Google Charts
3. Real time count of the overall number of participants

Further the script can handle also surveys where the dates weren't logged and the surveys can also be mixed.

All you need is to provide a URL following this pattern
http://yourdomain/survey_stat.php?survey=1010101,2020202,3030303&title=Client%20Name

survey=
Here you provide the survey ID's from one or different surveys (when the client runs more than one survey or you want to compare different surveys)
title =
Here you provide the title

That's it.
It is pretty easy and can be set up from anyone - but of course, if it is a build-in feature of limesurvey it would be more easy and flexible.

Here is the complete source code with the PHP script and the Google-Chart integration.
Check the attached screenshot for an real example.

<?php//Connect to the database you use for limesurvey
try {$db=new PDO('mysql:host=yourhost.com;dbname=lime_db','user','pass');} catch (PDOException $e){print"Error!: ".$e->getMessage()."<br/>";die();}function participants_pd($sid,$db){//get the number of participants for each day of the survey$facts=array();$x=0;if(!is_numeric($sid)){echo"Survery ID must be a valid number";exit();}else{$survey_tbl="lime_survey_".$sid;$query="select date(`submitdate`) AS date, count(`id`) AS number from `$survey_tbl` where `submitdate` != 'NULL' group by date(`submitdate`)";$stmt=$db->query($query);while($r=$stmt->fetch(PDO::FETCH_OBJ)){$facts['date'][$x]=$r->date;$facts['count'][$x]=$r->number;$x++;}$db=null;return$facts;}}function participants_sum($sid,$db){//get number of participants of the surveyif(!is_numeric($sid)){echo"Survery ID must be a valid number";exit();}else{$survey_tbl="lime_survey_".$sid;$sum="";$survey_tbl="lime_survey_".$sid;$query="select count(`id`) AS sum from `$survey_tbl` where `submitdate` != 'NULL'";$stmt=$db->query($query);$r=$stmt->fetch(PDO::FETCH_OBJ);$sum=$r->sum;return$sum;}}function titles($sid,$db){//get the titles$title="";$query_t="select `surveyls_title` from `lime_surveys_languagesettings` where `surveyls_survey_id` = :sid";$stmt_t=$db->prepare($query_t);$stmt_t->bindParam(':sid',$sid);$stmt_t->execute();$r=$stmt_t->fetch(PDO::FETCH_OBJ);$title=$r->surveyls_title;return$title;}//Getting the ID's of the surveysif(isset($_GET['survey'])){$titles=array();$participants=array();$surveys=array();//check if there are more then one surveys-idsif(preg_match("/,/",$_GET['survey'])){//there are more then one survey $surveys=explode(",",$_GET['survey']);}else{$surveys[]=$_GET['survey'];}foreach($surveysas$key=>$value){//Get the number of participants for each day of the survey of each survey$arrayname="survey".$value;
${$arrayname}= participants_pd($value,$db);//Get number of participants for the whole periode$participants[]= participants_sum($value,$db);//Get the titles of the surveys$titles[]= titles($value,$db);}}/**
* generating the data string for the google chart
* Will look something like that:
* ['Day','Title S1','Title S2','Title S3'],
* ['2013-10-08',35,462,101],
* ['2013-10-09',15,101,33],
* ['2013-10-10',7,37,10],
* ['2013-10-11',5,14,1],
* ['2013-10-13',2,10,1]]);
*///First the column names of the chart (in our case Day and the titles )$data="['Day'";foreach($titlesas$key=>$value){$data=$data.",'".$value."'";}$data=$data."]";//Check which survey the most days//The x-axis of the chart will filled with the dates of this survey$max=0;$max_sid="";foreach($surveysas$key=>$value){$arrayname="survey".$value;if($max<count(${$arrayname}['date'])){$max=count(${$arrayname}['date']);$max_sid=$key;}}//fill in the numbers of participants $x=0;while($x<$max){$data=$data.",['".${"survey".$surveys[$max_sid]}['date'][$x]."'";foreach($surveysas$key=>$value){$arrayname="survey".$value;if(!empty(${$arrayname}['count'][$x])){$data=$data.",".${$arrayname}['count'][$x];}else{$data=$data.",0";}}$data=$data."]";$x++;}//$data contains now a string with the JS Data Array //<?=$data has to be placed in the JS containing the google chart function//Setting the title of the site (can be the name of the project or of the costumer)$title="Development of the numbers of participants ";if(isset($_GET['title'])){trim($_GET['title']);htmlentities($_GET['title']);$title=$title.$_GET['title'];}?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><?=$title?></title>
<style type="text/css">
body,html {
font-family: Droid Sans;
font-size: 13px;
margin:0px;
width: 100%;
height: 100%;
background-color: grey;
}
h1 {
font-size: 18px;
background-color: white;
margin-left: 0px;
width: 50%;
padding: 5px;
}
h2 {
font-size: 15px;
}
.stat {
width: 50%;
background-color: white;
padding: 5px;
}
.stat_li {
width: 25%;
float: left;
text-align: right;
}
.stat_re {
width: 45%;
float: left;
margin-left: 5%;
font-weight: bold;
}
</style>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
//set up the chart
//check out https://developers.google.com/chart/ for more options
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
<?phpif(isset($_GET['survey'])){?>
function drawChart() {
var data = google.visualization.arrayToDataTable([
<?=$data?>
]);
var options = {
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
<?php}?>
</script>
</head>
<body>
<h1><?=$title?></h1>
<h2>Overall participants</h2>
<div class="stat">
<?phpif(isset($_GET['survey'])){$x=0;foreach($participantsas$key=>$value){echo"<div class='stat_li'>".$titles[$x].":</div><div class='stat_re'>".$value." Participants</div><div style='clear:both;'></div>";$x++;}}?>
</div>
<h2>Development of the participation</h2>
<div id="chart_div" style="width: 51%; height: 50%;"></div>
</body>
</html>

Just save the whole script as .php file on your webserver.

Feel free to use it as you wish and I'll appreciate your feedback and ideas.
But more important:
What do you think - could that be a useful feature in a next limesurvey version?