$option){ $column_name_lookup['element_'.$row['element_id'].'_'.$option_id] = $option; $column_type_lookup['element_'.$row['element_id'].'_'.$option_id] = $row['element_type']; } }elseif ('time' == $element_type){ if($element_constraint == 'show_seconds'){ $column_type_lookup['element_'.$row['element_id']] = $row['element_type']; }else{ $column_type_lookup['element_'.$row['element_id']] = 'time_noseconds'; } $column_name_lookup['element_'.$row['element_id']] = $row['element_title']; }else{ //for other elements with only 1 field $column_name_lookup['element_'.$row['element_id']] = $row['element_title']; $column_type_lookup['element_'.$row['element_id']] = $row['element_type']; } } /******************************************************************************************/ //set column properties for basic fields $column_name_lookup['id'] = $lang['export_num']; $column_name_lookup['date_created'] = $lang['date_created']; $column_name_lookup['date_updated'] = $lang['date_updated']; $column_name_lookup['ip_address'] = $lang['ip_address']; $column_type_lookup['id'] = 'number'; $column_type_lookup['date_created'] = 'text'; $column_type_lookup['date_updated'] = 'text'; $column_type_lookup['ip_address'] = 'text'; /******************************************************************************************/ //prepare headers if($type == 'xls'){ require('Spreadsheet/Excel/Writer.php'); // Creating a workbook $workbook = new Spreadsheet_Excel_Writer(); $workbook->setTempDir(DATA_DIR); // sending HTTP headers $clean_form_name = preg_replace("/[^A-Za-z0-9_-]/","",$form_name); $workbook->send("{$clean_form_name}.xls"); if(function_exists('iconv')){ $workbook->setVersion(8); } // Creating a worksheet $clean_form_name = substr($clean_form_name,0,30); //must be less than 31 characters $worksheet =& $workbook->addWorksheet($clean_form_name); $format_bold =& $workbook->addFormat(); $format_bold->setBold(); $format_bold->setFgColor(22); $format_bold->setPattern(1); $format_bold->setBorder(1); if(function_exists('iconv')){ $worksheet->setInputEncoding('UTF-8'); } $format_wrap = $workbook->addFormat(); $format_wrap->setTextWrap(); }elseif ($type == 'csv'){ require('Compat/Function/fputcsv.php'); $clean_form_name = preg_replace("/[^A-Za-z0-9_-]/","",$form_name); //Prepare headers header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public", false); header("Content-Description: File Transfer"); header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"{$clean_form_name}.csv\""); $out = fopen('php://output', 'w'); } /******************************************************************************************/ //get column labels, order in the correct position $query = "select * from `ap_form_{$form_id}` limit 1"; //limit 1 being used so that we could get the headers $result = do_query($query); //get actual field name from selected table $i = 0; $fields_num = mysql_num_fields($result); while($i < $fields_num){ $meta = mysql_fetch_field($result, $i); $columns[$i] = $meta->name; $i++; } $temp_columns = array_slice($columns,0,4); //first, reorder columns into the correct position $query = "select element_id, element_total_child, element_type from `ap_form_elements` where form_id='$form_id' and element_type != 'section' order by element_position asc"; $result = do_query($query); while($row = do_fetch_result($result)){ $element_id = $row['element_id']; $total_child = $row['element_total_child']; $element_type = $row['element_type']; if($total_child > 0){ if($element_type != 'checkbox'){ $max = $total_child + 1; for($i=0;$i<=$max;$i++){ if($i == 0){ if(in_array('element_'.$element_id,$columns)){ $temp_columns[] = 'element_'.$element_id; } }else{ if(in_array('element_'.$element_id.'_'.$i,$columns)){ $temp_columns[] = 'element_'.$element_id.'_'.$i; } } } }elseif ($element_type == 'checkbox'){ $checkbox_child_query = "select `option_id` from `ap_element_options` where form_id='{$form_id}' and element_id='{$element_id}' and live=1 order by position asc"; $checkbox_child_result = do_query($checkbox_child_query); while($check_child_row = do_fetch_result($checkbox_child_result)){ $option_id = $check_child_row['option_id']; if(in_array('element_'.$element_id.'_'.$option_id,$columns)){ $temp_columns[] = 'element_'.$element_id.'_'.$option_id; } } } }else{ if($element_type != 'checkbox'){ $temp_columns[] = 'element_'.$element_id; }else{ $temp_columns[] = 'element_'.$element_id.'_1'; } } } $columns = array(); $columns = $temp_columns; /******************************************************************************************/ //get form entries $query = "select * from `ap_form_{$form_id}` order by id asc"; $result = do_query($query); $i=0; $i_file=0; $c=0; $row_num = 1; $column_label = array(); $column_label_has_printed = false; while($row = do_fetch_result($result)){ for($j=0;$j<$fields_num;$j++){ $column_name = $columns[$j]; if(count($column_label) < $fields_num){ $column_label[$c] = $column_name_lookup[$column_name]; $c++; } //initialize with empty value, so it won't break our grid $form_data[$i][$j] = ''; if($column_type_lookup[$column_name] == 'time'){ $form_data[$i][$j] = date("h:i:s A",strtotime($row[$column_name])); }elseif($column_type_lookup[$column_name] == 'time_noseconds'){ if(!empty($row[$column_name])){ $form_data[$i][$j] = date("h:i A",strtotime($row[$column_name])); } }elseif(in_array($column_type_lookup[$column_name],array('dollar','euro','pound','yen'))){ //set column formatting for money fields $form_data[$i][$j] = $row[$column_name]; }elseif($column_type_lookup[$column_name] == 'date'){ //date with format MM/DD/YYYY if(!empty($row[$column_name]) && ($row[$column_name] != '0000-00-00')){ $form_data[$i][$j] = date("Y/m/d",strtotime($row[$column_name])); } }elseif($column_type_lookup[$column_name] == 'europe_date'){ //date with format MM/DD/YYYY if(!empty($row[$column_name]) && ($row[$column_name] != '0000-00-00')){ $form_data[$i][$j] = date("Y/m/d",strtotime($row[$column_name])); } }elseif($column_type_lookup[$column_name] == 'number'){ $form_data[$i][$j] = $row[$column_name]; }elseif (in_array($column_type_lookup[$column_name],array('radio','select'))){ //multiple choice or dropdown $exploded = array(); $exploded = explode('_',$column_name); $this_element_id = $exploded[1]; $this_option_id = $row[$column_name]; $form_data[$i][$j] = $element_option_lookup[$this_element_id][$this_option_id]; }elseif($column_type_lookup[$column_name] == 'checkbox'){ if(!empty($row[$column_name])){ $form_data[$i][$j] = $column_label[$j]; } }elseif(in_array($column_type_lookup[$column_name],array('phone','simple_phone'))){ $form_data[$i][$j] = $row[$column_name]; }elseif($column_type_lookup[$column_name] == 'file'){ if(!empty($row[$column_name])){ $filename_only = $row[$column_name]; //remove the element_x-xx- suffix we added to all uploaded files $file_1 = substr($filename_only,strpos($filename_only,'-')+1); $filename_only = substr($file_1,strpos($file_1,'-')+1); $form_data[$i][$j] = $filename_only; $q_string = base64_encode("form_id={$form_id}&id={$row['id']}&el={$column_name}"); $file_url[$i_file][$j] = "http://".$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']), '/\\')."/download.php?q={$q_string}"; } }else{ $form_data[$i][$j] = $row[$column_name]; } if($j == 0){ $form_data[$i][$j] = $row_num; } } $i_file++; //print_r($file_url); if($type == 'xls'){ //print column header if(!$column_label_has_printed){ $i=0; foreach ($column_label as $label){ $worksheet->write(0, $i, $label,$format_bold); $i++; } $column_label_has_printed = true; } //print column data foreach ($form_data as $row_data){ $col_num = 0; foreach ($row_data as $data){ //echo "rownum -1: ".($row_num - 1)."\n"; //echo "colnum: ".$col_num."\n"; if(empty($file_url[$row_num-1][$col_num])){ $data = str_replace("\r","",$data); if($col_num > 4){ $worksheet->write($row_num, $col_num, $data,$format_wrap); }else{ $worksheet->write($row_num, $col_num, $data); } }else{ $worksheet->writeUrl($row_num,$col_num,$file_url[$row_num-1][$col_num],$data); } $col_num++; } } }elseif ($type == 'csv'){ if(!$column_label_has_printed){ fputcsv($out, $column_label); $column_label_has_printed = true; } foreach ($form_data as $row_data){ fputcsv($out, $row_data); } } $row_num++; unset($form_data); unset($file_url); } /******************************************************************************************/ //start exporting data if($type == 'xls'){ // Let's send the file $workbook->close(); }elseif ($type == 'csv'){ fclose($out); } ?>