FetchRow(); if ($sumrows5['export'] != "1" && $_SESSION['USER_RIGHT_SUPERADMIN'] != 1) { exit; } include_once("login_check.php"); include_once(dirname(__FILE__)."/classes/pear/Spreadsheet/Excel/Writer.php"); include_once(dirname(__FILE__)."/classes/tcpdf/extensiontcpdf.php"); $surveybaselang=GetBaseLanguageFromSurveyID($surveyid); $exportoutput=""; // Get info about the survey $thissurvey=getSurveyInfo($surveyid); if (!$exportstyle) { // First add the standard fields $excesscols[]="id"; $excesscols[]='completed'; if ($thissurvey["datestamp"]=='Y') {$excesscols[]='datestamp';} if ($thissurvey["datestamp"]=='Y') {$excesscols[]='startdate';} if ($thissurvey["ipaddr"]=='Y') {$excesscols[]='ipaddr';} if ($thissurvey["refurl"]=='Y') {$excesscols[]='refurl';} //FIND OUT HOW MANY FIELDS WILL BE NEEDED - FOR 255 COLUMN LIMIT $query=" SELECT other, q.type, q.gid, q.qid, q.lid, q.lid1 FROM {$dbprefix}questions as q, {$dbprefix}groups as g " ." where q.gid=g.gid and g.sid=$surveyid and g.language='$surveybaselang' and q.language='$surveybaselang'" ." order by group_order, question_order"; $result=db_execute_assoc($query) or safe_die("Couldn't count fields
$query
".$connect->ErrorMsg()); while ($rows = $result->FetchRow()) { if (($rows['type']=='A') || ($rows['type']=='B')||($rows['type']=='C')||($rows['type']=='M')||($rows['type']=='P')||($rows['type']=='Q')||($rows['type'] == "K") ||($rows['type']=='E')||($rows['type']=='F')||($rows['type']=='H')) { $detailquery="select code from {$dbprefix}answers where qid=".$rows['qid']." and language='$surveybaselang' order by sortorder,code"; $detailresult=db_execute_assoc($detailquery) or safe_die("Couldn't find detailfields
$detailquery
".$connect->ErrorMsg()); while ($detailrows = $detailresult->FetchRow()) { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$detailrows['code']; if ($rows['type']=='P') { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$detailrows['code']."comment"; } } } elseif ($rows['type']==":" || $rows['type'] == ";") { $detailquery="select code from {$dbprefix}answers where qid=".$rows['qid']." and language='$surveybaselang' order by sortorder,code"; $detailresult=db_execute_assoc($detailquery) or die("Couldn't find detailfields
$detailquery
".htmlspecialchars($connect->ErrorMsg())); while ($detailrows = $detailresult->FetchRow()) { $detailquery2="SELECT * FROM {$dbprefix}labels WHERE lid=".$rows['lid']." AND language='$surveybaselang' ORDER BY sortorder, title"; $detailresult2=db_execute_assoc($detailquery2) or die("Couldn't find labels
$detailquery2
".htmlspecialchars($connect->ErrorMsg())); while ($dr2 = $detailresult2->FetchRow()) { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$detailrows['code']."_".$dr2['code']; } } } elseif ($rows['type']=='R') { $detailquery="select code from {$dbprefix}answers where qid=".$rows['qid']." and language='$surveybaselang' order by sortorder,code"; $detailresult=db_execute_assoc($detailquery) or safe_die("Couldn't find detailfields
$detailquery
".$connect->ErrorMsg()); $i=1; while ($detailrows = $detailresult->FetchRow()) { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$i; $i++; } } elseif ($rows['type']=='1') { // $detailquery="select code from {$dbprefix}answers where qid=".$rows['qid']." and language='$surveybaselang' order by sortorder,code"; $detailquery="select a.code, l.lid from {$dbprefix}answers as a, {$dbprefix}labels as l where qid=".$rows['qid']." AND (l.lid =".$rows['lid'].") and a.language='$surveybaselang' group by a.code, l.lid order by a.code "; $detailresult=db_execute_assoc($detailquery) or safe_die("Couldn't find detailfields
$detailquery
".$connect->ErrorMsg()); $i=0; while ($detailrows = $detailresult->FetchRow()) { // $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$rows['code'].$detailrows['code']."#".$i; $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$detailrows['code']."#0"; $i++; } // second scale $detailquery="select a.code, l.lid from {$dbprefix}answers as a, {$dbprefix}labels as l where qid=".$rows['qid']." AND (l.lid =".$rows['lid1'].") and a.language='$surveybaselang' group by a.code, l.lid order by a.code "; $detailresult=db_execute_assoc($detailquery) or safe_die("Couldn't find detailfields
$detailquery
".$connect->ErrorMsg()); $i=0; while ($detailrows = $detailresult->FetchRow()) { // $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$rows['code'].$detailrows['code']."#".$i; $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid'].$detailrows['code']."#1"; $i++; } } else { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid']; } if ($rows['other']=="Y" && ($rows['type']=='M' || $rows['type']=='!'|| $rows['type']=='L' || $rows['type']=='P' || $rows['type'] == "Z" || $rows['type'] == "W")) { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid']."other"; } if ($rows['other']=="Y" && ($rows['type']=='P' )) { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid']."othercomment"; } if ($rows['type']=='O' ) { $excesscols[]=$surveyid.'X'.$rows['gid']."X".$rows['qid']."comment"; } } $afieldcount = count($excesscols); $exportoutput .= browsemenubar($clang->gT("Export Results")); $exportoutput .= "
\n" ."
\n" ."" .""; // Find out if survey results are anonymous if ($thissurvey['private'] == "N") { $query=db_select_tables_like("{$dbprefix}tokens_$surveyid"); //SEE IF THERE IS AN ASSOCIATED TOKENS TABLE $result=$connect->Execute($query) or safe_die("Couldn't get table list
$query
".$connect->ErrorMsg()); $tablecount=$result->RecordCount(); } $exportoutput .= "\n"; if (isset($tablecount) && $tablecount > 0) //Do second column { //OPTIONAL EXTRAS (FROM TOKENS TABLE) if ($tablecount > 0) { $exportoutput .= ""; } } $exportoutput .= "\n" ."
\n" ."\n" ."\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."
" ."" .$clang->gT("Export responses"); if (isset($_POST['sql'])) {$exportoutput .= " - ".$clang->gT("Filtered from statistics script");} if (returnglobal('id')<>'') {$exportoutput .= " - ".$clang->gT("Single response");} if (incompleteAnsFilterstate() == "filter") { $selecthide="selected='selected'"; $selectshow=""; $selectinc=""; } elseif (incompleteAnsFilterstate() == "inc") { $selecthide=""; $selectshow=""; $selectinc="selected='selected'"; } else { $selecthide=""; $selectshow="selected='selected'"; $selectinc=""; } $exportoutput .= " ($afieldcount ".$clang->gT("Columns").")
" .$clang->gT("Questions")."
\n" ."\t\t\t" ."
\n" ."\t\t\t" ."
\n" ."\t\t\t" ."
\n" ."\t\t\t" ."
" ."\t\t\t  ".$clang->gT("Include")." \n" ."\t\t
" .$clang->gT("Answers")."
\n" ."\t\t\t" .""; $exportoutput .= "
\n" ."\t\t\t" .""; $exportoutput .= "
\n" ."\t\t\t" .""; $exportoutput .= "
\n" ."\t\t\t" ."\n" ."\t\t
" .$clang->gT("Format")."
\n" ."\t\t\t" ."
\n" ."\t\t\t" ."
\n" ."\t\t\t" ."
\n"; if(isset($usepdfexport) && $usepdfexport == 1) { $exportoutput .= "\t\t\t" ."\n"; } //get max number of datasets $max_datasets = 0; $max_datasets_query = "SELECT COUNT(id) FROM {$dbprefix}survey_$surveyid"; $max_datasets_result = db_execute_num($max_datasets_query); while($max = $max_datasets_result -> FetchRow()) { $max_datasets = $max[0]; } // form fields to limit export from X to Y $exportoutput .= "
".$clang->gT("from")." "; $exportoutput .= " ".$clang->gT("to")." "; $exportoutput .="\t\t
\n" ."\t\t\t\n" ."\t\t\t\n" ."\t\t
\n"; if (isset($_POST['sql'])) { $exportoutput .= "\t\n"; } if (returnglobal('id')<>'') { $exportoutput .= "\t\n"; } $exportoutput .= "
\n" ."
\n" ."" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."
" .$clang->gT("Column Control")."\n" ."\t\t
\n" ."\t\t\t".$clang->gT("Choose Columns").":\n" ."\t\t"; if ($afieldcount > 255) { $exportoutput .= "\t\t\t".$clang->gT("Help").""; } else { $exportoutput .= "\t\t\t".$clang->gT("Help").""; } $exportoutput .= "\t\t
\n" ."\t\t\t
\n" ."
\n" ."" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."\t\n" ."\t\t\n" ."\t\n" ."
" .$clang->gT("Token Control")."\n" ."\t\t
\n" .$clang->gT("Choose Token Fields").":" ."\t\t
" ."".$clang->gT("Help")."

\n" ."" ."
\n" ."" ."
\n" ."" ."
\n" ."" ."
\n"; $attrfieldnames=GetTokenFieldsAndNames($surveyid,true); foreach ($attrfieldnames as $attr_name=>$attr_desc) { $exportoutput .= "" ."
\n"; } $exportoutput .= "\t\t
" ."

\n" ."\t
\n"; return; } // ====================================================================== // Actual export routines start here ! // ====================================================================== $tokenTableExists=tokenTableExists($surveyid); if ($tokenTableExists) { $attributeFieldAndNames=GetTokenFieldsAndNames($surveyid,true); $attributeFields=array_keys($attributeFieldAndNames); } //sendcacheheaders(); // sending "cache headers" before this permit us to send something else than a "text/html" content-type switch ( $_POST["type"] ) { // this is a step to register_globals = false ;c) case "doc": header("Content-Disposition: attachment; filename=results-survey".$surveyid.".doc"); header("Content-type: application/vnd.ms-word"); $separator="\t"; break; case "xls": $workbook = new Spreadsheet_Excel_Writer(); $workbook->setVersion(8); // Inform the module that our data will arrive as UTF-8. // Set the temporary directory to avoid PHP error messages due to open_basedir restrictions and calls to tempnam("", ...) if (!empty($tempdir)) { $workbook->setTempDir($tempdir); } $workbook->send('results-survey'.$surveyid.'.xls'); // Creating the first worksheet $query="SELECT * FROM {$dbprefix}surveys_languagesettings WHERE surveyls_survey_id=".$surveyid; $result=db_execute_assoc($query) or safe_die("Couldn't get privacy data
$query
".$connect->ErrorMsg()); $row = $result->FetchRow(); $sheet =& $workbook->addWorksheet(utf8_decode($row['surveyls_title'])); $sheet->setInputEncoding('utf-8'); $separator="~|"; break; case "csv": header("Content-Disposition: attachment; filename=results-survey".$surveyid.".csv"); header("Content-type: text/comma-separated-values; charset=UTF-8"); $separator=","; break; case "pdf": $pdf = new PDF($pdforientation,'mm','A4'); $pdf->SetFont($pdfdefaultfont,'',$pdffontsize); $pdf->AddPage(); $pdf->intopdf("PDF Export ".date("Y.m.d-H:i",time())); $query="SELECT * FROM {$dbprefix}surveys_languagesettings WHERE surveyls_survey_id=".$surveyid; $result=db_execute_assoc($query) or safe_die("Couldn't get privacy data
$query
".$connect->ErrorMsg()); while ($row = $result->FetchRow()) { $pdf->intopdf($clang->gT("General information in language: ").getLanguageNameFromCode($row['surveyls_language']),'B'); $pdf->ln(); $pdf->titleintopdf($row['surveyls_title'],$row['surveyls_description']); $surveyname=$row['surveyls_title']; } $pdf->AddPage(); $separator="\t"; break; default: header("Content-Disposition: attachment; filename=results-survey".$surveyid.".csv"); header("Content-type: text/comma-separated-values; charset=UTF-8"); $separator=","; break; } Header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); // Export Language is set by default to surveybaselang // * the explang language code is used in SQL queries // * the alang object is used to translate headers and hardcoded answers // In the future it might be possible to 'post' the 'export language' from // the exportresults form $explang = $surveybaselang; $elang=new limesurvey_lang($explang); //STEP 1: First line is column headings $fieldmap=createFieldMap($surveyid); // We make the fieldmap alot more accesible by using the SGQA identifier as key // so we do not need ArraySearchByKey later foreach ($fieldmap as $fieldentry) { $outmap[]=$fieldentry['fieldname']; $outmap[$fieldentry['fieldname']]['type']= $fieldentry['type']; $outmap[$fieldentry['fieldname']]['sid']= $fieldentry['sid']; $outmap[$fieldentry['fieldname']]['gid']= $fieldentry['gid']; $outmap[$fieldentry['fieldname']]['qid']= $fieldentry['qid']; $outmap[$fieldentry['fieldname']]['aid']= $fieldentry['aid']; if (isset($fieldentry['lid1'])) {$outmap[$fieldentry['fieldname']]['lid1']= $fieldentry['lid1'];} if ($fieldentry['qid']!='') { $qq = "SELECT lid, other FROM {$dbprefix}questions WHERE qid={$fieldentry['qid']} and language='$surveybaselang'"; $qr = db_execute_assoc($qq) or safe_die("Error selecting type and lid from questions table.
".$qq."
".$connect->ErrorMsg()); while ($qrow = $qr->FetchRow()) { $outmap[$fieldentry['fieldname']]['lid']=$qrow['lid']; $outmap[$fieldentry['fieldname']]['other']=$qrow['other']; } } } //Get the fieldnames from the survey table for column headings $surveytable = "{$dbprefix}survey_$surveyid"; if (isset($_POST['colselect'])) { $selectfields=""; foreach($_POST['colselect'] as $cs) { if ($cs != 'completed') { $selectfields.= db_quote_id($cs).", "; } else { $selectfields.= "CASE WHEN $surveytable.submitdate IS NULL THEN 'N' ELSE 'Y' END AS completed, "; } } $selectfields = mb_substr($selectfields, 0, strlen($selectfields)-2); } else { $selectfields="$surveytable.*, CASE WHEN $surveytable.submitdate IS NULL THEN 'N' ELSE 'Y' END AS completed"; } $dquery = "SELECT $selectfields"; if (isset($_POST['first_name']) && $_POST['first_name']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.firstname"; } if (isset($_POST['last_name']) && $_POST['last_name']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.lastname"; } if (isset($_POST['email_address']) && $_POST['email_address']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.email"; } if ($tokenTableExists && $thissurvey['private']=='N') { if (isset($_POST['token']) && $_POST['token']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.token"; } foreach ($attributeFields as $attr_name) { if (isset($_POST[$attr_name]) && $_POST[$attr_name]=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.$attr_name"; } } } $dquery .= " FROM $surveytable"; if ($tokenTableExists && $thissurvey['private']=='N') { $dquery .= " LEFT OUTER JOIN {$dbprefix}tokens_$surveyid" . " ON $surveytable.token = {$dbprefix}tokens_$surveyid.token"; } if (incompleteAnsFilterstate() == "filter") { $dquery .= " WHERE $surveytable.submitdate is not null "; } elseif (incompleteAnsFilterstate() == "inc") { $dquery .= " WHERE $surveytable.submitdate is null "; } $dquery .=" ORDER BY id "; $dresult = db_select_limit_assoc($dquery, 1) or safe_die($clang->gT("Error")." getting results
$dquery
".$connect->ErrorMsg()); $fieldcount = $dresult->FieldCount(); $firstline=""; $faid=""; for ($i=0; $i<$fieldcount; $i++) { //Iterate through column names and output headings $field=$dresult->FetchField($i); $fieldinfo=$field->name; if ($fieldinfo == "lastname") { if ($type == "csv") {$firstline .= "\"".$elang->gT("Last Name")."\"$separator";} else {$firstline .= $elang->gT("Last Name")."$separator";} } elseif ($fieldinfo == "firstname") { if ($type == "csv") {$firstline .= "\"".$elang->gT("First Name")."\"$separator";} else {$firstline .= $elang->gT("First Name")."$separator";} } elseif ($fieldinfo == "email") { if ($type == "csv") {$firstline .= "\"".$elang->gT("Email Address")."\"$separator";} else {$firstline .= $elang->gT("Email Address")."$separator";} } elseif ($fieldinfo == "token") { if ($type == "csv") {$firstline .= "\"".$elang->gT("Token")."\"$separator";} else {$firstline .= $elang->gT("Token")."$separator";} } elseif (substr($fieldinfo,0,10)=="attribute_") { if ($type == "csv") {$firstline .= CSVEscape($fieldinfo)."$separator";} else {$firstline .= $attributeFieldAndNames[$fieldinfo]."$separator";} } elseif ($fieldinfo == "id") { if ($type == "csv") {$firstline .= "\"id\"$separator";} else {$firstline .= "id$separator";} } elseif ($fieldinfo == "datestamp") { if ($type == "csv") {$firstline .= "\"".$elang->gT("Date Last Action")."\"$separator";} else {$firstline .= $elang->gT("Date Last Action")."$separator";} } elseif ($fieldinfo == "startdate") { if ($type == "csv") {$firstline .= "\"".$elang->gT("Date Started")."\"$separator";} else {$firstline .= $elang->gT("Date Started")."$separator";} } elseif ($fieldinfo == "completed") { if ($type == "csv") {$firstline .= "\"".$elang->gT("Completed")."\"$separator";} else {$firstline .= $elang->gT("Completed")."$separator";} } elseif ($fieldinfo == "ipaddr") { if ($type == "csv") {$firstline .= "\"".$elang->gT("IP-Address")."\"$separator";} else {$firstline .= $elang->gT("IP-Address")."$separator";} } elseif ($fieldinfo == "refurl") { if ($type == "csv") {$firstline .= "\"".$elang->gT("Referring URL")."\"$separator";} else {$firstline .= $elang->gT("Referring URL")."$separator";} } else { //Data fields! //$fielddata=arraySearchByKey($fieldinfo, $fieldmap, "fieldname", 1); $fielddata=$outmap[$fieldinfo]; $fqid=$fielddata['qid']; $ftype=$fielddata['type']; $fsid=$fielddata['sid']; $fgid=$fielddata['gid']; $faid=$fielddata['aid']; if ($exportstyle == "abrev") { $qq = "SELECT question FROM {$dbprefix}questions WHERE qid=$fqid and language='$explang'"; $qr = db_execute_assoc($qq); while ($qrow=$qr->FetchRow()) {$qname=$qrow['question'];} $qname=strip_tags_full($qname); $qname=mb_substr($qname, 0, 15).".."; $firstline = str_replace("\n", "", $firstline); $firstline = str_replace("\r", "", $firstline); if ($type == "csv") {$firstline .= "\"$qname";} else {$firstline .= "$qname";} if (isset($faid)) {$firstline .= " [{$faid}]"; $faid="";} if ($ftype == ":" || $ftype == ";") { } if ($type == "csv") {$firstline .= "\"";} $firstline .= "$separator"; } else //headcode or full answer { $qq = "SELECT question, type, other, title FROM {$dbprefix}questions WHERE qid=$fqid AND language='$explang' ORDER BY gid, title"; //get the question $qr = db_execute_assoc($qq) or safe_die ("ERROR:
".$qq."
".$connect->ErrorMsg()); while ($qrow=$qr->FetchRow()) { if ($exportstyle == "headcodes"){$fquest=$qrow['title'];} else {$fquest=$qrow['question'];} } switch ($ftype) { case "R": //RANKING TYPE $fquest .= " [".$elang->gT("Ranking")." $faid]"; break; case "L": case "!": case "W": case "Z": if ($faid == "other") { $fquest .= " [".$elang->gT("Other")."]"; } break; case "O": //DROPDOWN LIST WITH COMMENT if ($faid == "comment") { $fquest .= " - Comment"; } break; case "M": //multioption if ($faid == "other") { $fquest .= " [".$elang->gT("Other")."]"; } else { if ($answers == "short") { $fquest .= " [$faid]"; //Show only the code } else { $lq = "SELECT * FROM {$dbprefix}answers WHERE qid=$fqid AND code = '$faid' AND language = '$explang'"; $lr = db_execute_assoc($lq); while ($lrow = $lr->FetchRow()) { $fquest .= " [".strip_tags_full($lrow['answer'])."]"; } } } break; case "P": //multioption with comment if (mb_substr($faid, -7, 7) == "comment") { $faid=mb_substr($faid, 0, -7); $comment=true; } if ($faid == "other") { $fquest .= " [".$elang->gT("Other")."]"; } else { if ($answers == "short") { $fquest .= " [$faid]"; //Show only the code } else { $lq = "SELECT * FROM {$dbprefix}answers WHERE qid=$fqid AND code = '$faid' AND language = '$explang'"; $lr = db_execute_assoc($lq); while ($lrow = $lr->FetchRow()) { $fquest .= " [".strip_tags_full($lrow['answer'])."]"; } } } if (isset($comment) && $comment == true) {$fquest .= " - comment"; $comment=false;} break; case "A": case "B": case "C": case "E": case "F": case "H": case "K": case "Q": case "^": if ($answers == "short") { $fquest .= " [$faid]"; } else { $lq = "SELECT * FROM {$dbprefix}answers WHERE qid=$fqid AND code= '$faid' AND language = '$explang'"; $lr = db_execute_assoc($lq); while ($lrow=$lr->FetchRow()) { $fquest .= " [".strip_tags_full($lrow['answer'])."]"; } } break; case ":": case ";": list($faid, $fcode) = explode("_", $faid); if ($answers == "short") { $fquest .= " [$faid] [$fcode]"; } else { $lq1="SELECT lid FROM {$dbprefix}questions WHERE qid=$fqid"; $lr1=db_execute_assoc($lq1); while($lrow1=$lr1->FetchRow()) { $flid = $lrow1['lid']; } $lq = "SELECT * FROM {$dbprefix}answers WHERE qid=$fqid AND code= '$faid' AND language = '$explang'"; $lr = db_execute_assoc($lq); while ($lrow=$lr->FetchRow()) { $lq2 = "SELECT * FROM {$dbprefix}labels WHERE lid=$flid AND code='$fcode' AND language = '$explang'"; $lr2 = db_execute_assoc($lq2); while ($lrow2=$lr2->FetchRow()) { $fquest .= " [".$lrow['answer']."] [".$lrow2['title']."]"; } } } break; case "1": // multi scale Headline $flid=$fielddata['lid']; $flid1=$fielddata['lid1']; if (mb_substr($fieldinfo,-1) == '0') { //TIBO $strlabel = "1"; $lq = "select a.*, l.*, t.label_name as labeltitle from {$dbprefix}answers as a, {$dbprefix}labels as l, {$dbprefix}labelsets as t where a.code='$faid' and qid=$fqid AND l.lid = $flid AND a.language='$surveybaselang' AND t.lid=$flid group by l.lid"; } else { $strlabel = "2"; $lq = "select a.*, l.*, t.label_name as labeltitle from {$dbprefix}answers as a, {$dbprefix}labels as l, {$dbprefix}labelsets as t where a.code='$faid' and qid=$fqid AND l.lid = $flid1 AND a.language='$surveybaselang' AND t.lid=$flid1 group by l.lid"; } $lr = db_execute_assoc($lq); $j=0; while ($lrow=$lr->FetchRow()) { $strlabel = $strlabel."-".$lrow['labeltitle']; $fquest .= " [".strip_tags_full($lrow['answer'])."][".strip_tags_full($strlabel)."]"; $j++; } break; } $fquest=strip_tags_full($fquest); $fquest = str_replace("\n", " ", $fquest); $fquest = str_replace("\r", "", $fquest); if ($type == "csv") { $firstline .="\"$fquest\"$separator"; } else { $firstline .= "$fquest $separator"; } } if($convertspacetous == "Y") { $firstline=str_replace(" ", "_", $firstline); } } } if ($type == "csv") { $firstline = mb_substr(trim($firstline),0,strlen($firstline)-1);} else { $firstline = trim($firstline); } $firstline .= "\n"; if ($type == "doc" || $type == "pdf") { $flarray=explode($separator, $firstline); } else if ($type == "xls") { //var_dump ($firstline); $flarray=explode($separator, $firstline); $fli=0; foreach ($flarray as $fl) { $sheet->write(0,$fli,$fl); $fli++; } //print_r($fieldmap); } else { $exportoutput .= $firstline; //Sending the header row } //calculate interval because the second argument at SQL "limit" //is the number of records not the ending point $from_record = sanitize_int($_POST['export_from']) - 1; $limit_interval = sanitize_int($_POST['export_to']) - sanitize_int($_POST['export_from']) + 1; $attributefieldAndNames=array(); //Now dump the data if ($tokenTableExists && $thissurvey['private']=='N') { $dquery = "SELECT $selectfields"; if (isset($_POST['first_name']) && $_POST['first_name']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.firstname"; } if (isset($_POST['last_name']) && $_POST['last_name']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.lastname"; } if (isset($_POST['email_address']) && $_POST['email_address']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.email"; } if (isset($_POST['token']) && $_POST['token']=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.token"; } foreach ($attributeFields as $attributefield) { if (isset($_POST[$attributefield]) && $_POST[$attributefield]=="on") { $dquery .= ", {$dbprefix}tokens_$surveyid.$attributefield"; } } $dquery .= " FROM $surveytable " . "LEFT OUTER JOIN {$dbprefix}tokens_$surveyid " . "ON $surveytable.token={$dbprefix}tokens_$surveyid.token "; if (incompleteAnsFilterstate() == "filter") { $dquery .= " WHERE $surveytable.submitdate is not null "; } elseif (incompleteAnsFilterstate() == "inc") { $dquery .= " WHERE $surveytable.submitdate is null "; } } else // this applies for exporting everything { $dquery = "SELECT $selectfields FROM $surveytable "; if (incompleteAnsFilterstate() == "filter") { $dquery .= " WHERE $surveytable.submitdate is not null "; } elseif (incompleteAnsFilterstate() == "inc") { $dquery .= " WHERE $surveytable.submitdate is null "; } } if (isset($_POST['sql'])) //this applies if export has been called from the statistics package { if ($_POST['sql'] != "NULL") { if (incompleteAnsFilterstate() == "filter" || incompleteAnsFilterstate() == "inc") {$dquery .= " AND ".stripcslashes($_POST['sql'])." ";} else {$dquery .= "WHERE ".stripcslashes($_POST['sql'])." ";} } } if (isset($_POST['answerid']) && $_POST['answerid'] != "NULL") //this applies if export has been called from single answer view { if (incompleteAnsFilterstate() == "filter" || incompleteAnsFilterstate() == "inc") {$dquery .= " AND $surveytable.id=".stripcslashes($_POST['answerid'])." ";} else {$dquery .= "WHERE $surveytable.id=".stripcslashes($_POST['answerid'])." ";} } $dquery .= "ORDER BY $surveytable.id"; if ($answers == "short") //Nice and easy. Just dump the data straight { //$dresult = db_execute_assoc($dquery); $dresult = db_select_limit_assoc($dquery, $limit_interval, $from_record); $rowcounter=0; while ($drow = $dresult->FetchRow()) { $drow=array_map('strip_tags_full',$drow); if($convertyto1 == "Y") //Converts "Y" to "1" in export { $convertyto=returnglobal('convertyto'); foreach($drow as $key=>$dr) { $fielddata=arraySearchByKey($key, $fieldmap, "fieldname", 1); if(isset($fielddata['type']) && ($fielddata['type'] == "M" || $fielddata['type'] == "P" || $fielddata['type'] == "Y") ) { if($dr == "Y") {$dr = $convertyto;} } $line[$key]=$dr; } $drow=$line; } if($convertnto2 == "Y") //Converts "N" to "2" in export { $convertnto=returnglobal('convertnto'); foreach($drow as $key=>$dr) { $fielddata=arraySearchByKey($key, $fieldmap, "fieldname", 1); if(isset($fielddata['type']) && ($fielddata['type'] == "M" || $fielddata['type'] == "P" || $fielddata['type'] == "Y") ) { if($dr == "N") {$dr = $convertnto;} } $line[$key]=$dr; } $drow=$line; } $rowcounter++; if ($type == "csv") { $exportoutput .= "\"".implode("\"$separator\"", str_replace("\"", "\"\"", str_replace("\r\n", " ", $drow))) . "\"\n"; //create dump from each row } elseif ($type == "xls") { $colcounter=0; foreach ($drow as $rowfield) { $rowfield=str_replace("?","-",$rowfield); $sheet->write($rowcounter,$colcounter,$rowfield); $colcounter++; } } else if($type == "pdf") { $pdf->titleintopdf($clang->gT("New Record")); foreach ($drow as $rowfield) { $rowfield=str_replace("?","-",$rowfield); $pdfstring .=$rowfield." | "; } $pdf->intopdf($pdfstring); } else { $exportoutput .= implode($separator, str_replace("\r\n", " ", $drow)) . "\n"; //create dump from each row } } } elseif ($answers == "long") //chose complete answers { $labelscache=array(); //$dresult = db_execute_num($dquery) or safe_die("ERROR: $dquery -".$connect->ErrorMsg()); $dresult = db_select_limit_num($dquery, $limit_interval, $from_record); $fieldcount = $dresult->FieldCount(); $rowcounter=0; while ($drow = $dresult->FetchRow()) { $rowcounter++; if ($type == "pdf") { //$pdf->Write (5,$exportoutput); if($rowcounter != 1) { $pdf->AddPage(); } $pdf->Cell(0,10,$elang->gT('NEW RECORD')." ".$rowcounter,1,1); } if ($type == "doc") { $exportoutput .= "\n\n\n".$elang->gT('NEW RECORD')."\n"; } for ($i=0; $i<$fieldcount; $i++) //For each field, work out the QID { $fqid=0; // By default fqid is set to zero $field=$dresult->FetchField($i); $fieldinfo=$field->name; if ($fieldinfo != "startlanguage" && $fieldinfo != "id" && $fieldinfo != "datestamp" && $fieldinfo != "startdate" && $fieldinfo != "ipaddr" && $fieldinfo != "refurl" && $fieldinfo != "token" && $fieldinfo != "firstname" && $fieldinfo != "lastname" && $fieldinfo != "email" && (substr($fieldinfo,0,10)!="attribute_") && $fieldinfo != "completed") { // $fielddata=arraySearchByKey($fieldinfo, $fieldmap, "fieldname", 1); $fielddata=$outmap[$fieldinfo]; $fqid=$fielddata['qid']; $ftype=$fielddata['type']; $fsid=$fielddata['sid']; $fgid=$fielddata['gid']; $faid=$fielddata['aid']; $flid=$fielddata['lid']; if (isset($fielddata['lid1'])) {$flid1=$fielddata['lid1'];} $fother=$fielddata['other']; if ($type == "doc" || $type == "pdf") { $ftitle=$flarray[$i]; } } else { $fsid=""; $fgid=""; if ($type == "doc" || $type == "pdf") { switch($fieldinfo) { case "datestamp": $ftitle=$elang->gT("Date Last Action").":"; break; case "startdate": $ftitle=$elang->gT("Date Started").":"; break; case "ipaddr": $ftitle=$elang->gT("IP Address").":"; break; case "completed": $ftitle=$elang->gT("Completed").":"; break; case "refurl": $ftitle=$elang->gT("Referring URL").":"; break; case "firstname": $ftitle=$elang->gT("First Name").":"; break; case "lastname": $ftitle=$elang->gT("Last Name").":"; break; case "email": $ftitle=$elang->gT("Email").":"; break; case "id": $ftitle=$elang->gT("ID").":"; break; case "token": $ftitle=$elang->gT("Token").":"; break; case "tid": $ftitle=$elang->gT("Token ID").":"; break; case "startlanguage": $ftitle=$elang->gT("Language").":"; break; default: if (substr($fieldinfo,0,10)=='attribute_') { $ftitle=$attributeFieldAndNames[$fieldinfo]; } else { $fielddata=$outmap[$fieldinfo]; if (isset($fielddata['title']) && !isset($ftitle)) {$ftitle=$fielddata['title'].":";} } } // switch } } if ($fqid == 0) { $ftype = "-"; // This is set if it not a normal answer field, but something like tokenID, First Name etc } if ($type == "csv") {$exportoutput .= "\"";} if ($type == "doc") {$exportoutput .= "\n$ftitle\n\t";} if ($type == "pdf"){ $pdf->intopdf($ftitle);} switch ($ftype) { case "-": //SPECIAL Placeholder TYPE $exportoutput .= $drow[$i]; if($type == "pdf"){$pdf->intopdf($drow[$i]);} break; case "R": //RANKING TYPE $lq = "SELECT * FROM {$dbprefix}answers WHERE qid=$fqid AND language='$explang' AND code = ?"; $lr = db_execute_assoc($lq, array($drow[$i])); while ($lrow = $lr->FetchRow()) { $exportoutput .= strip_tags_full($lrow['answer']); if($type == "pdf"){$pdf->intopdf(strip_tags_full($lrow['answer']));} } break; case "1": if (mb_substr($fieldinfo,-1) == 0) { $lq = "select a.*, l.*, l.code as lcode, l.title as ltitle from {$dbprefix}answers as a, {$dbprefix}labels as l where qid=$fqid AND l.lid =$flid AND a.language='$explang' AND l.code = ? group by l.lid"; } else { $lq = "select a.*, l.*, l.code as lcode, l.title as ltitle from {$dbprefix}answers as a, {$dbprefix}labels as l where qid=$fqid AND l.lid =$flid1 AND a.language='$explang' AND l.code = ? group by l.lid"; } $lr = db_execute_assoc($lq, array($drow[$i])) or safe_die($lq."
ERROR:
".$connect->ErrorMsg()); while ($lrow = $lr->FetchRow()) { $exportoutput .= strip_tags_full($lrow['ltitle']); if($type == "pdf"){$pdf->intopdf(strip_tags_full($lrow['ltitle']));} } break; case "L": //DROPDOWN LIST case "!": if (mb_substr($fieldinfo, -5, 5) == "other") { $exportoutput .= strip_tags_full($drow[$i]); if($type == "pdf"){$pdf->intopdf($drow[$i]);} } else { if ($drow[$i] == "-oth-") { $exportoutput .= $elang->gT("Other"); if($type == "pdf"){$pdf->intopdf($elang->gT("Other"));} } else { $lq = "SELECT * FROM {$dbprefix}answers WHERE qid=$fqid AND language='$explang' AND code = ?"; $lr = db_execute_assoc($lq, array($drow[$i])) or safe_die($lq."
ERROR:
".$connect->ErrorMsg()); while ($lrow = $lr->FetchRow()) { //if ($lrow['code'] == $drow[$i]) {$exportoutput .= $lrow['answer'];} if ($type == "csv") { $exportoutput .= str_replace("\"", "\"\"", strip_tags_full($lrow['answer'])); if($type == "pdf"){$pdf->intopdf(str_replace("\"", "\"\"", strip_tags_full($lrow['answer'])));} } else { $exportoutput .= strip_tags_full($lrow['answer']); if($type == "pdf"){$pdf->intopdf(strip_tags_full($lrow['answer']));} } } } } break; case "W": case "Z": if (mb_substr($fieldinfo, -5, 5) == "other") { $exportoutput .= strip_tags_full($drow[$i]); if($type == "pdf"){$pdf->intopdf($drow[$i]);} } else { if ($drow[$i] == "-oth-") { $exportoutput .= $elang->gT("Other"); if($type == "pdf"){$pdf->intopdf($elang->gT("Other"));} } else { $fquery = "SELECT * FROM {$dbprefix}labels WHERE lid=$flid AND language='$explang' AND code='$drow[$i]'"; $fresult = db_execute_assoc($fquery) or safe_die("ERROR:".$fquery."
".$qq."
".$connect->ErrorMsg()); while ($frow = $fresult->FetchRow()) { $exportoutput .= strip_tags_full($frow['title']); if($type == "pdf"){$pdf->intopdf($frow['title']);} } } } break; case "O": //DROPDOWN LIST WITH COMMENT $lq = "SELECT * FROM {$dbprefix}answers WHERE qid=$fqid AND language='$explang' ORDER BY answer"; $lr = db_execute_assoc($lq) or safe_die ("Could do it
$lq
".$connect->ErrorMsg()); $found = ""; while ($lrow = $lr->FetchRow()) { if ($lrow['code'] == $drow[$i]) { $exportoutput .= strip_tags_full($lrow['answer']); $found = "Y"; if($type == "pdf"){$pdf->intopdf(strip_tags_full($lrow['answer']));} } } //This following section exports the comment field if ($found != "Y") { if ($type == "csv") {$exportoutput .= str_replace("\r\n", "\n", str_replace("\"", "\"\"", strip_tags_full($drow[$i])));} else if ($type == "pdf") {$pdf->intopdf(str_replace("\r\n", " ", strip_tags_full($drow[$i])));} else {$exportoutput .= str_replace("\r\n", " ", $drow[$i]);} } break; case "Y": //YES\NO switch($drow[$i]) { case "Y": $exportoutput .= $elang->gT("Yes"); if($type == "pdf"){$pdf->intopdf($elang->gT("Yes"));} break; case "N": $exportoutput .= $elang->gT("No"); if($type == "pdf"){$pdf->intopdf($elang->gT("No"));} break; default: $exportoutput .= $elang->gT("N/A"); if($type == "pdf"){$pdf->intopdf($elang->gT("N/A"));} break; } break; case "G": //GENDER switch($drow[$i]) { case "M": $exportoutput .= $elang->gT("Male"); if($type == "pdf"){$pdf->intopdf($elang->gT("Male"));} break; case "F": $exportoutput .= $elang->gT("Female"); if($type == "pdf"){$pdf->intopdf($elang->gT("Female"));} break; default: $exportoutput .= $elang->gT("N/A"); if($type == "pdf"){$pdf->intopdf($elang->gT("N/A"));} break; } break; case "M": //multioption case "P": if (mb_substr($fieldinfo, -5, 5) == "other") { $exportoutput .= strip_tags_full($drow[$i]); if($type == "pdf"){$pdf->intopdf($drow[$i]);} } elseif (mb_substr($fieldinfo, -7, 7) == "comment") { $exportoutput .= strip_tags_full($drow[$i]); if($type == "pdf"){$pdf->intopdf($drow[$i]);} } else { switch($drow[$i]) { case "Y": $exportoutput .= $elang->gT("Yes"); if($type == "pdf"){$pdf->intopdf($elang->gT("Yes"));} break; case "N": $exportoutput .= $elang->gT("No"); if($type == "pdf"){$pdf->intopdf($elang->gT("No"));} break; case "": $exportoutput .= $elang->gT("No"); if($type == "pdf"){$pdf->intopdf($elang->gT("No"));} break; default: $exportoutput .= $drow[$i]; if($type == "pdf"){$pdf->intopdf($drow[$i]);} break; } } break; case "C": switch($drow[$i]) { case "Y": $exportoutput .= $elang->gT("Yes"); if($type == "pdf"){$pdf->intopdf($elang->gT("Yes")); } break; case "N": $exportoutput .= $elang->gT("No"); if($type == "pdf"){$pdf->intopdf($elang->gT("No")); } break; case "U": $exportoutput .= $elang->gT("Uncertain"); if($type == "pdf"){$pdf->intopdf($elang->gT("Uncertain"));} break; } case "E": switch($drow[$i]) { case "I": $exportoutput .= $elang->gT("Increase"); if($type == "pdf"){$pdf->intopdf($elang->gT("Increase"));} break; case "S": $exportoutput .= $elang->gT("Same"); if($type == "pdf"){$pdf->intopdf($elang->gT("Same"));} break; case "D": $exportoutput .= $elang->gT("Decrease"); if($type == "pdf"){$pdf->intopdf($elang->gT("Decrease"));} break; } break; case "F": case "H": if (!isset($labelscache[$flid.'|'.$explang.'|'.$drow[$i]])) { $fquery = "SELECT * FROM {$dbprefix}labels WHERE lid=$flid AND language='$explang' AND code='$drow[$i]'"; $fresult = db_execute_assoc($fquery) or safe_die("ERROR:".$fquery."\n".$qq."\n".$connect->ErrorMsg()); if ($fresult) { $frow=$fresult->FetchRow(); if($type == "pdf"){$pdf->intopdf(strip_tags_full($frow['title']));} $exportoutput .= strip_tags_full($frow['title']); $labelscache[$flid.'|'.$explang.'|'.$drow[$i]]=strip_tags_full($frow['title']); } } else { $exportoutput .=$labelscache[$flid.'|'.$explang.'|'.$drow[$i]]; if($type == "pdf"){$pdf->intopdf($labelscache[$flid.'|'.$explang.'|'.$drow[$i]]);} } break; case "1": //dual scale $flid=$fielddata['lid']; $flid1=$fielddata['lid1']; if (mb_substr($fieldinfo,-1) == '0') { $strlabel = "1"; $lq = "select title from {$dbprefix}labels as l where l.lid = $flid AND l.language='$surveybaselang'"; } else { $strlabel = "2"; $lq = "select title from {$dbprefix}labels as l where l.lid = $flid1 AND l.language='$surveybaselang'"; } $lr = db_execute_assoc($lq); while ($lrow=$lr->FetchRow()) { $fquest .= " [".strip_tags_full($lrow['title'])."][".strip_tags_full($strlabel).". label]"; } break; default: $tempresult=$dresult->FetchField($i); if ($tempresult->name == "token") { $tokenquery = "SELECT firstname, lastname FROM {$dbprefix}tokens_$surveyid WHERE token='$drow[$i]'"; if ($tokenresult = db_execute_assoc($tokenquery)) //or safe_die ("Couldn't get token info
$tokenquery
".$connect->ErrorMsg()); while ($tokenrow=$tokenresult->FetchRow()) { $exportoutput .= "{$tokenrow['lastname']}, {$tokenrow['firstname']}"; if($type == "pdf"){$pdf->intopdf($tokenrow['lastname']." , ".$tokenrow['firstname']);} } else { $exportoutput .= $elang->gT("Tokens problem - token table missing"); if($type == "pdf"){$pdf->intopdf($elang->gT("Tokens problem - token table missing"));} } } else { if ($type == "csv") {$exportoutput .= str_replace("\r\n", "\n", str_replace("\"", "\"\"", strip_tags_full($drow[$i])));} else if ($type == "pdf") {$pdf->intopdf(str_replace("\r\n", " ", strip_tags_full($drow[$i])));} else {$exportoutput .= str_replace("\r\n", " ", $drow[$i]);} } } if ($type == "csv") {$exportoutput .= "\"";} $exportoutput .= "$separator"; $ftype = ""; } $exportoutput=mb_substr($exportoutput,0,-(strlen($separator))); IF ($type=='xls') { $rowarray=explode($separator, $exportoutput); $fli=0; foreach ($rowarray as $row) { $sheet->write($rowcounter,$fli,$row); $fli++; } $exportoutput=''; } else {$exportoutput .= "\n";} } } if ($type=='xls') { $workbook->close(); } else if($type=='pdf') { $pdf->Output($clang->gT($surveyname)." ".$surveyid.".pdf","D"); } else { echo $exportoutput; } exit; function strip_tags_full($string) { $string=html_entity_decode($string, ENT_QUOTES, "UTF-8"); mb_regex_encoding('utf-8'); $pattern = array('\r', '\n', '-oth-'); for ($i=0; $i