print responses in pdf like the html filling survey

More
6 years 2 months ago #63516 by dsp77
dsp77 created the topic: print responses in pdf like the html filling survey
Hello,

I have a nice design for the surveys, now all surveys are completed and i want to printout the responses in the front design template how can i achieve this?

i saw if the survey is not completed i can access it from admin tokens actions. It would be great if i can access the survey after completion. I tried to make a completed survey not completed but all the responses are gone. any advise please?

Please Log in to join the conversation.

More
6 years 2 months ago - 6 years 2 months ago #63519 by Ben_V
Ben_V replied the topic: print responses in pdf like the html filling survey
Browse the answers by individual responses and you'll see that you can switch completed/not completed

Benoît

EM Variables => bit.ly/1TKQyNu | EM Roadmap => bit.ly/1UTrOB4
Last Releases => 2.6x.x goo.gl/ztWfIV | 2.06/2.6.x => bit.ly/1Qv44A1
Demo Surveys => goo.gl/HuR6Xe (already included in /docs/demosurveys)
Attachments:
Last Edit: 6 years 2 months ago by Ben_V.

Please Log in to join the conversation.

More
6 years 2 months ago #63548 by dsp77
dsp77 replied the topic: print responses in pdf like the html filling survey
still cannot view the data even if i mark it not completed, i think it doesn't take the info from the db

Please Log in to join the conversation.

More
6 years 2 months ago #63550 by mdekker
mdekker replied the topic: print responses in pdf like the html filling survey
There is no feature to see a completed survey in the browser layout. I know a lot of people would love to have that but at the moment it is impossible.

When using tokens and token based answer persistence you could set a response to not completed and view the answers but when there are no tokens i think it is impossible.

---
Menno Dekker

Please Log in to join the conversation.

More
5 years 9 months ago #70751 by dataguru
dataguru replied the topic: print responses in pdf like the html filling survey
Hmmm, so can I jerry rig it to let me print the survey screens of a completed survey by
changing completed from Y to N in the survey table
and then
using that survey's URL for that token to get back into that survey

/index.php?lang=en&sid=49636&token=ThatSurveysTokenValue

Please Log in to join the conversation.

More
5 years 9 months ago #70765 by snathan99
snathan99 replied the topic: print responses in pdf like the html filling survey
I had the same question and here is what I did to get the PDF output.

(1) Take the "printanswers.php" file and make a copy (pa.php for example)
(2) Modify the new pa.php as below:
(3) Use code.google.com/p/wkhtmltopdf/ to convert to PDF

Code below:

<?php
/*
* MODIFIED - NON-WORKING CODE!!! NEED TO TWEAK TO WORK!!!
*
* LimeSurvey
* Copyright (C) 2007 The LimeSurvey Project Team / Carsten Schmitz
* All rights reserved.
* License: GNU/GPL License v2 or later, see LICENSE.php
* LimeSurvey is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*
* $Id: NEW printanswers.php 10922 2011-09-02 14:02:28Z c_schmitz $
*
*/

$surveyid = $_GET["surveyid"];
$id = $_GET["id"];
$token = $_GET["token"];
if (is_null($surveyid))
{
echo "No Survey Id Passed in URL";
//header('Location: www.example.com/ ');
exit();
}

if ((is_null($id) && is_null($token)))
{
echo "Neither id nor token passed in URL";
//header('Location: www.example.com/ ');
exit();
}

//Security Checked: POST, GET, SESSION, REQUEST, returnglobal, DB
require_once(dirname(__FILE__).'/classes/core/startup.php');
require_once(dirname(__FILE__).'/config-defaults.php');
require_once(dirname(__FILE__).'/common.php');

$valquery = "SELECT sid FROM ".db_table_name('surveys')." WHERE sid=$surveyid";
$dtresult=db_execute_num($valquery);
if ($dtresult->RecordCount()==0)
{
echo "Invalid Survey id";
exit();
}

$valquery = "SELECT id,submitdate FROM ".db_table_name('survey_'.$surveyid)." WHERE ";
if (is_null($id))
$valquery .= "token='".db_quote($token)."'";
else
$valquery .= "id=$id";
$dtresult=db_execute_num($valquery);
if ($dtresult->RecordCount()==0)
{
echo "Survey Not Started or Invalid survey token / id";
exit();
}
$dtresult=db_execute_assoc($valquery);
$dtdata=$dtresult->FetchRow();
if (is_null($id))
{
$id = $dtdata;
}
if (is_null($dtdata))
{
echo "Survey Incomplete";
exit();
}

$language = GetBaseLanguageFromSurveyID($surveyid);
$clang = SetSurveyLanguage( $surveyid, $language);
// Get the survey inforamtion
$thissurvey = getSurveyInfo($surveyid,$language);

//SET THE TEMPLATE DIRECTORY
if (!isset($thissurvey) || !$thissurvey)
{
$thistpl=validate_templatedir("default");
}
else
{
$thistpl=validate_templatedir($thissurvey);
}

//if ($thissurvey=='N') die(); //Die quietly if print answers is not permitted

//CHECK IF SURVEY IS ACTIVATED AND EXISTS
$actquery = "SELECT * FROM ".db_table_name('surveys')." as a inner join ".db_table_name('surveys_languagesettings')." as b on (b.surveyls_survey_id=a.sid and b.surveyls_language=a.language) WHERE a.sid=$surveyid";

$actresult = db_execute_assoc($actquery); //Checked
$actcount = $actresult->RecordCount();
if ($actcount > 0)
{
while ($actrow = $actresult->FetchRow())
{
$surveytable = db_table_name("survey_".$actrow);
$surveyname = "{$actrow}";
}
}

//OK. IF WE GOT THIS FAR, THEN THE SURVEY EXISTS AND IT IS ACTIVE, SO LETS GET TO WORK.
//SHOW HEADER

//***********************************************************************


$printoutput = '';

$aFullResponseTable=aGetFullResponseTable($surveyid,$id,$language);



//Get the fieldmap @TODO: do we need to filter out some fields?
unset ($aFullResponseTable);
//unset ($aFullResponseTable);
unset ($aFullResponseTable);
unset ($aFullResponseTable);
unset ($aFullResponseTable);
//unset ($aFullResponseTable);
unset ($aFullResponseTable);
//unset Feedback Answers
$gid = $assessments;
$grpid = "gid_" . $gid;
unset ($aFullResponseTable[$grpid]);

// Below this is the rest of the original printanswers.php code
// modified to suit your needs of output
// It should mostly work as is but I customized it for my output
// by creating a new css, etc.
// The format of print is as follows
// Start with this
$printoutput1 = '';
$printoutput1 .= "<div class='printouttitle'> Output Heading here - $surveyname ?</div><p> \n";
$printoutput .= "<table class='printouttable' >\n";
// This is for heading
$printoutput .= "<tr class='printanswersgroup'><td colspan='3'>Submission core details</td></tr>\n";
// Question and Answer
// $printoutput .= "<tr class='printanswersquestionhead'><td>Item</td><td>Question here</td><td>Answer here</td></tr>\n";


// Anywhere here is some more sample that is modified from the original on the actual output:

// I CUT AND PASTED THIS FROM A WORKING CODE, BUT DID NOT TEST IT AS I REMOVED SOME SECTIONS THAT WERE VERY SPECIFIC TO MY NEEDS
// PLEASE MODIFY AND TEST BEFORE USE - USE AT OWN RISK!
//
// ALSO NOTICE I TOOK OUT THE PDF PART COMPLETELY. WHY? BECAUSE I USE
// code.google.com/p/wkhtmltopdf/ to then take the output to PDF from HTML
// wkhtmltopdf works great!
// YOU can call this new URL directly from wkhtmltopdf - Or do a wrapper
//
foreach ($aFullResponseTable as $sFieldname=>$fname)
{
//The two lines below remove the answer codes from the answer (if any) - this is customized by me!
$ans=explode("[",$fname[2]);
$fname[2]=$ans[0];

if (substr($sFieldname,0,4)=='gid_')
{
$printoutput1 .= "</table>\n";
// This is page break between groups
$printoutput1 .= "<div style=\"page-break-before: always\"> </div>";
$printoutput1 .= "<table class='printouttable' >\n";
$printoutput1 .= "\t<tr class='printanswersgroup'><td colspan='2'>{$fname[0]}</td></tr>\n";
}
elseif (substr($sFieldname,0,4)=='qid_')
{
$printoutput1 .= "\t<tr class='printanswersquestionhead'><td colspan='2'>{$fname[0]}</td></tr>\n";
}
else
{
// This is customized to avoid repeating questions in dual scale
//$printoutput1 .= "\t<tr class='printanswersquestion'><td>{$fname[0]} {$fname[1]}</td><td class='printanswersanswertext'>{$fname[2]}</td></tr>";
if($dfname0==$fname[0] && $dfname1==$fname[1])
{
$dfname0=' ';
$dfname1=$dfname0;
}
else
{
$dfname0=$fname[0];
$dfname1=$fname[1];
}
//$printoutput1 .= "\t<tr class='printanswersquestion'><td>{$fname[0]} {$fname[1]}</td><td>{$fname[2]}</td></tr>";
$printoutput1 .= "\t<tr class='printanswersquestion'><td>{$dfname0} {$dfname1}</td><td>{$fname[2]}</td></tr>";
$dfname0=$fname[0];
$dfname1=$fname[1];
}
}

$printoutput1 .= "</table>\n";

//Display the page with user answers
sendcacheheaders();
doHeader();

echo templatereplace(file_get_contents(sGetTemplatePath($thistpl).'/startpage.pstpl'));
echo templatereplace(file_get_contents(sGetTemplatePath($thistpl).'/printanswers.pstpl'),array('ANSWERTABLE'=>$printoutput1));
echo templatereplace(file_get_contents(sGetTemplatePath($thistpl).'/endpage.pstpl'));
echo "</body></html>";


?>

Please Log in to join the conversation.

More
5 years 9 months ago #70778 by dataguru
dataguru replied the topic: print responses in pdf like the html filling survey
Cool. Thanks!
I'll let you know how it goes.

Please Log in to join the conversation.

More
4 years 10 months ago #87683 by zunch2000
zunch2000 replied the topic: print responses in pdf like the html filling survey
Hi,

Can you further help me in implementing your solution to the PDF problem?
I did as you mentioned.
I don't know how to call the wkhtmltopdf?

Best regards

Please Log in to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now