folder = $site_path . EXPORT_FOLDER.'/'; # nastavimo id ankete $this->sid = $sid; if (IS_WINDOWS) { $this->_QUOTE = '"'; } else { $this->_QUOTE = '\''; } # informacije ankete SurveyInfo::getInstance()->SurveyInit($this->sid); $this->survey = SurveyInfo::getInstance()->resetSurveyData(); $this->survey = SurveyInfo::getInstance()->getSurveyRow(); # aktivne tabele if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) $this->db_table = '_active'; // Preverimo ce ima user dostop $d = new Dostop(); if(!$d->checkDostop($this->sid)){ die('Error! Access to survey '.$this->sid.' denied.'); } # vsilimo podstran zaradi profila statusov $_POST['podstran'] = A_COLLECT_DATA_EXPORT; $this->_CURRENT_STATUS_FILTER = STATUS_FIELD.' ~ /6|5/'; # za profile statusov SurveyStatusProfiles :: Init($this->sid); # za profile variabel SurveyVariablesProfiles :: Init($this->sid, $global_user_id); # za profil ifov SurveyConditionProfiles :: Init($this->sid, $global_user_id); # za profil časov SurveyTimeProfiles :: Init($this->sid, $global_user_id); $result = sisplet_query ("SELECT value FROM misc WHERE what='SurveyExport'"); list ($SurveyExport) = mysqli_fetch_row ($result); $adminTypes = array(0=>$lang['forum_admin'],1=>$lang['forum_manager'],2=>$lang['forum_clan'],3=>$lang['forum_registered'] ); if ($SurveyExport<$admin_type) { die ($lang['srv_export_no_access'].$adminTypes[$admin_type]); } # manjkajoče vrednosti $this->SMV = new SurveyMissingValues($this->sid); #preverimo datoteke self::checkFile(); self::setUpFilter(); self::getHeaderData(); # header podatke rabimo vedno } /** Naredimo izvoz * */ public function DoExport() { # v odvisnosti kaj eksportiramo switch ($_GET['m']) { case 'sav': self::exportSav(); break; case 'spss': self::exportSpss(); break; case 'excel': self::exportExcel(); break; case 'excel_xls': self::exportExcelXls(); break; case 'txt': self::exportText(); break; } } /** Nastavimo filtre * */ private function setUpFilter() { if ($this->_fileStatus >= 0) { $this->_HEADERS = unserialize(file_get_contents($this->_headFileName)); $this->exportSettings = array(); foreach ($_SESSION AS $pkey => $pvalue) { // if starts with export if (!strncmp($pkey, "export", strlen("export"))) { #ali iz seje ali preko requesta $this->exportSettings[ltrim($pkey, "{export}")] = $pvalue || $_REQUEST[lcfirst($pvalue)]; } } $this->_EXPORT_HIDDEN_SYSTEM = ($this->exportSettings['HiddenSystem']) ? true : false; $this->_EXPORT_HIDDEN_SYSTEM = ((int)$_REQUEST['hiddenSystem'] == 1 || $_REQUEST['hiddenSystem'] == 'true') ? true : $this->_EXPORT_HIDDEN_SYSTEM; $this->_EXPORT_FULL_META = ($this->exportSettings['FullMeta'] || !$this->_EXPORT_HIDDEN_SYSTEM) ? true : false; $this->_EXPORT_ONLY_DATA = ($this->exportSettings['OnlyData'] || !$this->_EXPORT_HIDDEN_SYSTEM) ? true : false; $this->_SPECIAL_EXPORT = ($_REQUEST['special_export'] == 'true') ? true : false; # filtriranje po statusih $this->_CURRENT_STATUS_FILTER = SurveyStatusProfiles :: getStatusAsAWKString(); # ali imamo filter na testne podatke if (isset($this->_HEADERS['testdata']['grids'][0]['variables'][0]['sequence']) && (int)$this->_HEADERS['testdata']['grids'][0]['variables'][0]['sequence'] > 0) { $test_data_sequence = $this->_HEADERS['testdata']['grids'][0]['variables'][0]['sequence']; $filter_testdata = SurveyStatusProfiles :: getStatusTestAsAWKString($test_data_sequence); } # filtriranje po časih $_time_profile_awk = SurveyTimeProfiles :: getFilterForAWK($this->_HEADERS['unx_ins_date']['grids']['0']['variables']['0']['sequence']); # ali imamo filter na uporabnost if (isset($this->_HEADERS['usability']['variables'][0]['sequence']) && (int)$this->_HEADERS['usability']['variables'][0]['sequence'] > 0) { $usability_data_sequence = $this->_HEADERS['usability']['variables'][0]['sequence']; $filter_usability = SurveyStatusProfiles :: getStatusUsableAsAWKString($usability_data_sequence); } # dodamo še ife SurveyConditionProfiles :: setHeader($this->_HEADERS); $_condition_profile_AWK = SurveyConditionProfiles:: getAwkConditionString(); if (($_condition_profile_AWK != "" && $_condition_profile_AWK != null ) || ($_time_profile_awk != "" && $_time_profile_awk != null) || ($filter_testdata != null) || ($filter_usability != null)) { $this->_CURRENT_STATUS_FILTER = '('.$this->_CURRENT_STATUS_FILTER; if ($_condition_profile_AWK != "" && $_condition_profile_AWK != null ) { $this->_CURRENT_STATUS_FILTER .= '&&'.$_condition_profile_AWK; } if ($_time_profile_awk != "" && $_time_profile_awk != null) { $this->_CURRENT_STATUS_FILTER .= '&&'.$_time_profile_awk; } if ($filter_testdata != null ) { $this->_CURRENT_STATUS_FILTER .= '&&('.$filter_testdata.')'; } if ($filter_usability != null ) { $this->_CURRENT_STATUS_FILTER .= '&&('.$filter_usability.')'; } $this->_CURRENT_STATUS_FILTER .= ')'; } # FILTRI VARIABEL - Katere variable ne izpisujemo $svp_pv = array(); # ne prikazujemo user-idja $not_svp_pv['uid'] = 'uid'; # ne prikazujemo recnumberja //$not_svp_pv['recnum'] = 'recnum'; # ne prikazujemo meta podatkov if ($this->_EXPORT_FULL_META == false) { $not_svp_pv['meta'] = 'meta'; $not_svp_pv['recnum'] = 'recnum'; } # filtriranje po spremenljivkah $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile'); $this->_FILTRED_VARIABLES = SurveyVariablesProfiles :: getProfileVariables(SurveyVariablesProfiles :: checkDefaultProfile($dvp)); # skreiramo filter variabel za podatke if (count($this->_HEADERS) > 0) { // zloopamo skozi spremenljivke in sestavimo filter po stolpcih $_tmp_filter = array(); foreach ($this->_HEADERS AS $spid => $spremenljivka) { # privzeto spremenljivke ne prikazujemo $_can_show = false; $tip = $spremenljivka['tip']; # če spremenljivka ni v neprikazanih jo prikažemo if (!in_array($spid, $not_svp_pv)) { # če imamo sistemski email ali telefon, ime, priimek (v header je nastavljno "hide_system" = 1) # potem v odvisnosti od nastavitve prikazujemo samo navadne podatke ali pa samo te sistemske, zaradizaščite podatkov if ($this->_EXPORT_HIDDEN_SYSTEM == true && $spremenljivka['hide_system'] == '1' || $this->_SPECIAL_EXPORT == true) { # prikazujemo sistemske, in spremenljivka je sistemska $_can_show = true; } else if ( $this->_EXPORT_HIDDEN_SYSTEM == false && $spremenljivka['hide_system'] !== '1' ) { # prikazujemo nesistemske, in spremenljivka ni sistemska $_can_show = true; } } if ($_can_show == true) { # če mamo filter po variablah ga upoštevamo if ( ( $tip == 'm' || $tip == 'sm' ) || ( count($this->_FILTRED_VARIABLES) == 0 || (count($this->_FILTRED_VARIABLES) > 0 && isset($this->_FILTRED_VARIABLES[$spid])) ) || ( $this->_EXPORT_HIDDEN_SYSTEM == true ) ){ $svp_pv[$spid] = $spid; if (count($spremenljivka['grids']) > 0 ) { foreach ($spremenljivka['grids'] AS $gid => $grid) { if (count ($grid['variables']) > 0) { foreach ($grid['variables'] AS $vid => $variable ){ if (($tip !== 'sm' && $tip !== 'm') || $this->exportSettings['FullMeta'] > 0) { $_tmp_filter[]= $variable['sequence']; } } } } } $spr_cont++; } } } } # prilagodimo array profilov variabel $this->_SVP_PV = $svp_pv; if (count($_tmp_filter) > 0) { $this->_VARIABLE_FILTER = implode(',',$_tmp_filter); } } } /** polovimo array z header podatki * */ function getHeaderData() { if ($this->_headFileName != null && $this->_headFileName != '') { $this->_HEADERS = unserialize(file_get_contents($this->_headFileName)); } else { echo 'Error! Empty file name!'; } } /** naredimo izvoz za excel - xls * */ function exportExcelXls() { global $site_path; global $site_path; $folder = $site_path . EXPORT_FOLDER.'/'; if ($this->_fileStatus >= 0 && $this->_dataFileName !== null && $this->_dataFileName !== '' && $this->_headFileName !== null && $this->_headFileName !== '') { #zapišemo v temp file $file_handler = fopen($this->_dataFileName.'.xls',"w"); $output1 = ''; $output2 = ''; # naredimo header row foreach ($this->_HEADERS AS $spid => $spremenljivka) { if (isset($this->_SVP_PV[$spid])) { foreach ($spremenljivka['grids'] AS $gid => $grid) { foreach ($grid['variables'] AS $vid => $variable ){ if(($spremenljivka['tip'] !== 'sm' && $spremenljivka['tip'] !== 'm') || $this->exportSettings['FullMeta'] > 0){ $output1 .= ''.strip_tags($variable['variable']).''; $output2 .= ''.strip_tags($variable['naslov']).''; } } } } } fwrite($file_handler,$output1."\r\n"); fwrite($file_handler,$output2."\r\n"); fclose($file_handler); # sfiltriramo podatke exec ('awk -F'.$this->_QUOTE.STR_DLMT.$this->_QUOTE.' '.$this->_QUOTE.$this->_CURRENT_STATUS_FILTER.' {print $0}'.$this->_QUOTE.' '.$this->_dataFileName.' > '.$this->_dataFileName .'_data1'.TMP_EXT); if (IS_WINDOWS) { #filtri spremenljivk $cmdLn1_1 = 'cut -d "|" -f '.$this->_VARIABLE_FILTER.' '.$this->_dataFileName .'_data1'.TMP_EXT.' > '.$this->_dataFileName .'_data1_1'.TMP_EXT; } else { #filtri spremenljivk $cmdLn1_1 = 'cut -d \'|\' -f '.$this->_VARIABLE_FILTER.' '.$this->_dataFileName .'_data1'.TMP_EXT.' > '.$this->_dataFileName .'_data1_1'.TMP_EXT; } $out1_1 = shell_exec($cmdLn1_1); # zamenjamo | z exec('sed '.$this->_QUOTE.'s/|/<\/td>/g'.$this->_QUOTE.' '.$this->_dataFileName .'_data1_1'.TMP_EXT.' >> '.$this->_dataFileName.'.xls'); $convertType = 1; // kateri tip konvertiranja uporabimo $convertTypes[1] = array('charSet' => "windows-1250", 'delimit' => ";", 'newLine' => "\n", 'BOMchar' => "\xEF\xBB\xBF"); # izvedemo download if ($fd = fopen ($this->_dataFileName.'.xls', "r")) { // clean the output buffer ob_clean(); $fsize = filesize($this->_dataFileName.'.xls'); $path_parts = pathinfo($this->_dataFileName.'.xls'); $ext = strtolower($path_parts["extension"]); header('Content-type: application/vnd.ms-excel; charset='.$convertTypes[$convertType]['charSet']); header('Content-Disposition: attachment; filename="anketa'.$this->sid.'-'.date('Y-m-d').'.xls"'); # header('Content-length: '.$fsize); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private',false); header('Content-Transfer-Encoding:­ binary'); ob_flush(); # dodami boomchar za utf-8 echo $convertTypes[$convertType]['BOMchar']; // Izpisemo celo tabelo echo ''."\r\n"; $cnt=0; while ($line = fgets ($fd)) { if($cnt > 1) echo ''); $line = str_replace(array("\r","\n"), array("",""), $line); print($line); if($cnt > 1) print(''); else print(''); print("\r\n"); $cnt++; } echo '
'; else print('
'; } else { echo "Napaka"; } fclose ($fd); #pobrišemo vse tmp datoteke foreach (glob($folder . 'export_data_'.$this->sid.'_*'.TMP_EXT) as $fileToDelete) { unlink($fileToDelete); } unlink ($this->_dataFileName.'.xls'); } else { echo ''; } exit; } /** naredimo izvoz za excel * */ function exportExcel() { global $site_path; $folder = $site_path . EXPORT_FOLDER.'/'; session_start(); if ($this->_fileStatus >= 0 && $this->_dataFileName !== null && $this->_headFileName !== null) { if ($_POST['export_delimit'] == 0) { $field_delimit = ';'; $replace_what = $_POST['replace_what0']; $replace_with = $_POST['replace_with0']; } else { $field_delimit = ','; $replace_what = $_POST['replace_what1']; $replace_with = $_POST['replace_with1']; } #zapišemo v temp file $file_handler = fopen($this->_dataFileName.'.csv',"w"); $output1 = ''; $output2 = ''; fclose($file_handler); # sfiltriramo podatke exec ('awk -F'.$this->_QUOTE.STR_DLMT.$this->_QUOTE.' '.$this->_QUOTE.$this->_CURRENT_STATUS_FILTER.' {print $0}'.$this->_QUOTE.' '.$this->_dataFileName.' > '.$this->_dataFileName .'_data1'.TMP_EXT); if (IS_WINDOWS) { #filtri spremenljivk $cmdLn1_1 = 'cut -d "|" -f '.$this->_VARIABLE_FILTER.' '.$this->_dataFileName .'_data1'.TMP_EXT.' > '.$this->_dataFileName .'_data1_1'.TMP_EXT; } else { #filtri spremenljivk $cmdLn1_1 = 'cut -d \'|\' -f '.$this->_VARIABLE_FILTER.' '.$this->_dataFileName .'_data1'.TMP_EXT.' > '.$this->_dataFileName .'_data1_1'.TMP_EXT; } $out1_1 = shell_exec($cmdLn1_1); # zamenjamo uporabniške znake if (is_array($replace_what) && count($replace_what) > 0 && is_array($replace_with) && count($replace_with) > 0) { $_new_filename = '_data1_1'; $cnt_replace = min(count($replace_what),count($replace_with)); for ($i = 0; $i < $cnt_replace; $i++) { exec('sed '.$this->_QUOTE .'s/'.$replace_what[$i].'/'.$replace_with[$i].'/g'.$this->_QUOTE .' '.$this->_dataFileName .'_data1_'.($i+1).TMP_EXT.' > '.$this->_dataFileName .'_data1_'.($i+2).TMP_EXT); $_new_filename = '_data1_'.($i+2); } } else { $_new_filename = '_data1_1'; } # zamenjamo | z ; exec('sed '.$this->_QUOTE.'s/|/\x22'.$field_delimit.'=\x22/g'.$this->_QUOTE.' '.$this->_dataFileName .$_new_filename.TMP_EXT.' >> '.$this->_dataFileName.'.csv'); $convertType = 1; // kateri tip konvertiranja uporabimo $convertTypes[1] = array('charSet' => 'windows-1250', 'delimit' => ';', 'newLine' => "\n", 'BOMchar' => "\xEF\xBB\xBF"); # izvedemo download if ($fd = fopen ($this->_dataFileName.'.csv', "r")) { $fsize = filesize($this->_dataFileName.'.csv'); $path_parts = pathinfo($this->_dataFileName.'.csv'); $ext = strtolower($path_parts["extension"]); #ob_clean(); #header('Content-type: application/vnd.ms-excel; charset='.$convertTypes[$convertType]['charSet']); header('Content-type: text/csv; charset='.$convertTypes[$convertType]['charSet']); header('Content-Disposition: attachment; filename="anketa'.$this->sid.'-'.date('Y-m-d').'.csv"'); # ker iz zacasne datoteke preberemo samo podatke brez headerja (header izpisujemo posebej) # ne moremo podati content-lenght. Razen če bi predhodno vsae zapisali v tmp datoteko in potem prebrali dolžino # header('Content-length: '.$fsize); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private',false); header('Content-Transfer-Encoding:­ binary'); #ob_flush(); # dodami boomchar za utf-8 echo $convertTypes[$convertType]['BOMchar']; # naredimo header row if ((int)$_POST['export_labels'] == 1) { foreach ($this->_HEADERS AS $spid => $spremenljivka) { if (isset($this->_SVP_PV[$spid])) { if (count($spremenljivka['grids']) > 0) { foreach ($spremenljivka['grids'] AS $gid => $grid) { foreach ($grid['variables'] AS $vid => $variable ){ if(($spremenljivka['tip'] !== 'sm' && $spremenljivka['tip'] !== 'm') || $this->exportSettings['FullMeta'] > 0){ $output1 .= str_replace($replace_what, $replace_with, strip_tags($variable['variable'])) . $field_delimit; $output2 .= str_replace($replace_what, $replace_with, strip_tags($variable['naslov'])) . $field_delimit; } } } } } } echo $output1."\r\n"; echo $output2."\r\n"; } while ($line= fgets ($fd)) { echo '="'; $line = str_replace(array("\r","\n"), array("",""), $line); print ($line); print ('"'); print ("\r\n"); } } else { echo 'x1:Napaka'; } fclose ($fd); #pobrišemo vse tmp datoteke foreach (glob($folder . 'export_data_'.$this->sid.'*dat_data*'.TMP_EXT) as $fileToDelete) { unlink($fileToDelete); } unlink ($this->_dataFileName.'.csv'); } else { echo 'x2:Napaka!'; } exit; } /** naredimo izvoz za txt * */ function exportText() { global $site_path; $folder = $site_path . EXPORT_FOLDER.'/'; if ($this->_fileStatus >= 0 && $this->_dataFileName !== null && $this->_dataFileName !== '' && $this->_headFileName !== null && $this->_headFileName !== '') { #zapišemo v temp file $file_handler = fopen($this->_dataFileName.'.txt',"w"); $output1 = ''; $output2 = ''; // array za labele (ce jih izpisujemo) $display_labels = true; $labels = array(); # naredimo header row foreach ($this->_HEADERS AS $spid => $spremenljivka) { if (isset($this->_SVP_PV[$spid])) { foreach ($spremenljivka['grids'] AS $gid => $grid) { foreach ($grid['variables'] AS $vid => $variable ){ if(($spremenljivka['tip'] !== 'sm' && $spremenljivka['tip'] !== 'm') || $this->exportSettings['FullMeta'] > 0){ $output1 .= strip_tags($variable['variable']).';'; $output2 .= strip_tags($variable['naslov']).';'; } } } } // Ce izpisujemo tudi labele if($display_labels && isset($spremenljivka['spr_id'])){ if(in_array($spremenljivka['tip'], array('1','3','6','16'))){ $sequences = array(); $sequences = explode('_', $spremenljivka['sequences']); $vars = $this->getVariableLabels($spremenljivka['spr_id']); foreach($sequences as $sequence){ $labels[$sequence] = $vars; } } } } fwrite($file_handler,$output1."\n"); fwrite($file_handler,$output2."\n"); fclose($file_handler); # sfiltriramo podatke exec ('awk -F'.$this->_QUOTE.STR_DLMT.$this->_QUOTE.' '.$this->_QUOTE.$this->_CURRENT_STATUS_FILTER.' {print $0}'.$this->_QUOTE.' '.$this->_dataFileName.' > '.$this->_dataFileName .'_data1'.TMP_EXT); if (IS_WINDOWS) { #filtri spremenljivk $cmdLn1_1 = 'cut -d "|" -f '.$this->_VARIABLE_FILTER.' '.$this->_dataFileName .'_data1'.TMP_EXT.' > '.$this->_dataFileName .'_data1_1'.TMP_EXT; } else { #filtri spremenljivk $cmdLn1_1 = 'cut -d \'|\' -f '.$this->_VARIABLE_FILTER.' '.$this->_dataFileName .'_data1'.TMP_EXT.' > '.$this->_dataFileName .'_data1_1'.TMP_EXT; } $out1_1 = shell_exec($cmdLn1_1); # zamenjamo | z ; exec('sed '.$this->_QUOTE.'s/|/;/g'.$this->_QUOTE.' '.$this->_dataFileName .'_data1_1'.TMP_EXT.' >> '.$this->_dataFileName.'.txt'); $convertType = 1; // kateri tip konvertiranja uporabimo $convertTypes[1] = array('charSet' => "windows-1250", 'delimit' => ";", 'newLine' => "\n", 'BOMchar' => "\xEF\xBB\xBF"); # izvedemo download if ($fd = fopen ($this->_dataFileName.'.txt', "r")) { // clean the output buffer ob_clean(); $fsize = filesize($this->_dataFileName.'.txt'); $path_parts = pathinfo($this->_dataFileName.'.txt'); $ext = strtolower($path_parts["extension"]); header('Content-type: text/plain; charset='.$convertTypes[$convertType]['charSet']); header('Content-Disposition: attachment; filename="anketa'.$this->sid.'-'.date('Y-m-d').'.txt"'); # header('Content-length: '.$fsize); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private',false); header('Content-Transfer-Encoding:­ binary'); ob_flush(); # dodami boomchar za utf-8 echo $convertTypes[$convertType]['BOMchar']; /*while(!feof($fd)) { $buffer = fread($fd, 2048); echo $buffer.''; }*/ $i=0; // Loop po vrsticah while(($line = fgets($fd)) !== false) { // Samo naslovni vrstici z metapodatki oz. vse vrstice ce nimamo label if($i < 2 || !$display_labels){ echo $line; } // Izpisujemo labele v podatkovnih vrsticah else{ // Vrstico s podatki razbijemo, dodamo labele in jo nazaj sestavimo $line_array = explode(';', $line); if(count($line_array) > 0){ foreach($line_array as $seq => $val){ // Izpisemo vrednost echo $val; // Izpisemo labelo $seq += 3; if(isset($labels[$seq][0]['values'][$val])){ echo ' ("'.$labels[$seq][0]['values'][$val].'")'; } // Vsem razen zadnjemu dodamo se separator if($seq < count($line_array)+2) echo ';'; } } } $i++; } } else { echo "Napaka"; } fclose ($fd); #pobrišemo vse tmp datoteke foreach (glob($folder . 'export_data_'.$this->sid.'_*'.TMP_EXT) as $fileToDelete) { unlink($fileToDelete); } unlink ($this->_dataFileName.'.txt'); } else { echo ''; } exit; } // shranim SPS in A00, potem pokličem spss in je. private function exportSav () { // izbriši staro // pač... RM dela :-) @unlink ($this->folder .'tmp_spss2sav' .$this->sid .'.a00'); @unlink ($this->folder .'tmp_spss2sav' .$this->sid .'.sps'); // spss + a00 $this->exportSpss("save", true, true); $this->exportSpss("save", false, true); // convert //echo "Diagnostics for developers (link is below):
"; passthru ('pspp ' .$this->folder .'tmp_spss2sav' .$this->sid .'.sps'); //echo '

Link'; // Tole ne dela ker kessira star file //header ('location: SurveyData/' .'tmp_spss2sav' .$this->sid .'.SAV'); $file_url = 'SurveyData/' .'tmp_spss2sav' .$this->sid .'.SAV'; header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private',false); header('Content-Transfer-Encoding:­ binary'); header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); readfile($file_url); } /** * mode download - klasično, pač skrani SAV + A00 * mode save - shrani fajla * * pa porinem si noter še data_par (true - a00, false - sps). */ private function exportSpss($mode = "download", $data_param = false, $pspp=false) { global $site_path, $lang; $folder = $site_path . EXPORT_FOLDER.'/'; $tmp_files = $this->folder.'tmp_spss_'.$this->sid.'.php'; #polovimo max št znakov za posamezne sekvence if (IS_WINDOWS) { $command = 'awk -F"|" "BEGIN {{OFS=\"\"} {ORS=\"\n\"} {FS=\"\x7C\"} {SUBSEP=\"\x7C\"}} ' .'{if (MaxFields < NF) MaxFields = NF; for (i=1; i<=NF; i++) { Field[NR, i] = $i; l = length($i); if (l < 1) l = 1; if (Length[i] < l) Length[i] = l; };} ' .'END {print\"\x3C\x3Fphp\"; for (i=1; i<=MaxFields; i++) { print \"$spss_length[\",i,\"]\",\"=\",Length[i],\";\"}; print\"\x3F\x3E\"}" ' .$this->_dataFileName. ' > '.$tmp_files ; } else { $command = 'awk -F"|" \'BEGIN {{OFS=""} {ORS="\n"} {FS="\x7C"} {SUBSEP="\x7C"}} ' .'{if (MaxFields < NF) MaxFields = NF; for (i=1; i<=NF; i++) { Field[NR, i] = $i; l = length($i); if (l < 1) l = 1; if (Length[i] < l) Length[i] = l; };} ' .'END {print"\x3C\x3Fphp"; for (i=1; i<=MaxFields; i++) { print "$spss_length[",i,"]","=",Length[i],";"}; print"\x3F\x3E"}\' ' .$this->_dataFileName. ' > '.$this->folder.'tmp_spss_'.$this->sid.'.php'; } $out = shell_exec($command); include($tmp_files ); # pobrišemo inkludan fajl, ker jih več ne rabimo if (file_exists($tmp_files )) { unlink($tmp_files ); } if ($this->_fileStatus >= 0 && $this->_dataFileName !== null && $this->_dataFileName !== '' && $this->_headFileName !== null && $this->_headFileName !== '') { #ali lovimo datoteko s strukturo ali datoteko z podatki $data = false; if ((isset($_REQUEST['exportData']) && (int)$_REQUEST['exportData'] == 1) || $data_param == true) { $data = true; } # delamo datoteko s strukturo if ( $data == false ) { # TODO - odstranit šumnike iz header datoteke #$str = preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $str); $_value_labels_numbers = ''; # temp variabla kamor shranimo imena variabel numeričnih odgovorov $_value_labels_text = ''; # temp variabla kamor shranimo imena variabel tekstovnih odgovorov #preberemo HEADERS iz datoteke $this->_HEADERS = unserialize(file_get_contents($this->_headFileName)); # poiščemo maximalno število znakov pri missing vrednostih za tekstovne in number odgovore $_all_missing_values = SurveyMissingValues::GetMissingValuesForSurvey(array(1,2,3)); $_max_text_missing_chars = 0; $_max_number_missing_chars = 0; # polovimo maximalne dolžine znakov foreach ($_all_missing_values AS $mkey => $missing) { $_max_text_missing_chars = max($_max_text_missing_chars, strlen($mkey . ': '. $missing)); $_max_number_missing_chars = max($_max_number_missing_chars, strlen($mkey)); } $maxLengthForSpr = self::create_array_SPSS(max($_max_text_missing_chars,$_max_number_missing_chars)); //$resultString .= .NEW_LINE; $resultString = $lang['srv_spss_export_base_instructions']; $resultString .= NEW_LINE.'.'.NEW_LINE.NEW_LINE; $resultString .= 'PRESERVE.'.NEW_LINE; // TOLE NE DELA OK ZA DECIMALKE V NOVIH SPSSih /*if ($pspp == false) { $resultString .= 'SET UNICODE ON.'.NEW_LINE; } else { $resultString .= "SET LOCALE='UTF-8'.".NEW_LINE; }*/ $resultString .= "SET LOCALE='en_US'.".NEW_LINE; $resultString .= 'SET UNICODE ON.'.NEW_LINE; $resultString .= 'SET DECIMAL DOT.'.NEW_LINE.NEW_LINE; # seznam spremenljivk in opis formata $resultString .= 'GET DATA'.NEW_LINE; $resultString .= ' /TYPE = TXT'.NEW_LINE; if ($mode == "download") { $resultString .= ' /FILE = \'C:\anketa'.$this->sid.'-'.date('Y-m-d').'_podatki.txt\''.NEW_LINE; } else { $resultString .= ' /FILE = \'' .$this->folder .'tmp_spss2sav' .$this->sid .'.a00\''.NEW_LINE; } //.$lang['srv_spss_export_file_instructions'].NEW_LINE; $resultString .= ' /ARRANGEMENT = DELIMITED'.NEW_LINE; $resultString .= ' /FIRSTCASE = 1'.NEW_LINE; $resultString .= ' /IMPORTCASE = ALL'.NEW_LINE; $resultString .= ' /DELIMITERS = " "'.NEW_LINE; $resultString .= ' /QUALIFIER = "\'"'.NEW_LINE; $resultString .= ' /VARIABLES = '.NEW_LINE; # dodamo seznam variabel z tipi podatkov if (count($this->_HEADERS) > 0) { $cnt = 1; foreach ($this->_HEADERS AS $spid => $spremenljivka) { if (isset($this->_SVP_PV[$spid]) && count($spremenljivka['grids']) > 0) { foreach ($spremenljivka['grids'] AS $gid => $grid) { if (count($grid['variables']) > 0) { foreach ($grid['variables'] AS $vid => $variable ){ $seq=$variable['sequence']; if(($spremenljivka['tip'] !== 'sm' && $spremenljivka['tip'] !== 'm') || $this->exportSettings['FullMeta'] > 0){ # vsako v svojo vrstico if (substr($variable['spss'],0,1) == 'F') { # pri številih $_number = explode('.',substr($variable['spss'],1)); $_cela = isset($_number[0]) && $_number[0] > 0 ? $_number[0] : 0; $_decimalna = isset($_number[1]) && $_number[1] > 0 ? $_number[1] : 0; $_spss_chars = 'F'.max($_max_number_missing_chars,$_cela,1).'.'.$_decimalna; } else if ($variable['spss'] == 'DATETIMEw') { # pri tekstovnih odgovorih #$_spss_chars = 'A'.$_max_text_missing_chars; #polovimo po novi metodi $_spss_chars = 'A'.$spss_length[$seq]; } else { # pri tekstovnih odgovorih #$_spss_chars = substr($variable['spss'],0,1) . max($maxLengthForSpr[$spid],$_max_text_missing_chars,substr($variable['spss'],1),1); #polovimo po novi metodi $_spss_chars = 'A'.$spss_length[$seq]; } // Language meta moramo preimenovati za spss, ker drugace je podvojen z language spremenljivko if($variable['variable'] == 'Language') $resultString .= ' Language_meta '.$_spss_chars.NEW_LINE; else $resultString .= ' ' . preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $variable['variable']) . ' '.$_spss_chars.NEW_LINE; # polovimo imena variable za missing vrednosti Nagovora ne dodajmo if (isset($spremenljivka['tip']) && $spremenljivka['tip'] != 'm' && $spremenljivka['tip'] != 'sm' && $spremenljivka['tip'] != 5) { if (substr($variable['spss'],0,1) == 'F') { $_value_labels_numbers .= $variable['variable'].' '; // Dodamo prelom vsakih 10 variabel zaradi max dolzine vrstice if($cnt > 10){ $_value_labels_numbers .= NEW_LINE; $cnt = 0; } $cnt++; } else if (substr($variable['spss'],0,1) == 'A') { $_value_labels_text .= $variable['variable'].' '; // Dodamo prelom vsakih 10 variabel zaradi max dolzine vrstice if($cnt > 10){ $_value_labels_text .= NEW_LINE; $cnt = 0; } $cnt++; } } } } } } } } } $resultString .= ' .'.NEW_LINE.NEW_LINE; #ime ankete brez presledkov // pspp ne mara _ if ($pspp == false) $resultString .= 'DATASET NAME ' . preg_replace("/[^a-zA-Z0-9_]/",'_',$this->survey['naslov']) . ' WINDOW=FRONT.' . NEW_LINE.NEW_LINE; else $resultString .= 'DATASET NAME ' . preg_replace("/[^a-zA-Z0-9_]/",'',$this->survey['naslov']) . ' WINDOW=FRONT.' . NEW_LINE.NEW_LINE; #labele vprasanj ==> VARIABLE LABELS # seznam spremenljivk in opis formata (pika na koncu vsake labele) if (count($this->_HEADERS) > 0) { foreach ($this->_HEADERS AS $spid => $spremenljivka) { if (isset($this->_SVP_PV[$spid]) && count($spremenljivka['grids']) > 0) { foreach ($spremenljivka['grids'] AS $gid => $grid) { if (count($grid['variables']) > 0) { foreach ($grid['variables'] AS $vid => $variable ){ if(($spremenljivka['tip'] !== 'sm' && $spremenljivka['tip'] !== 'm') || $this->exportSettings['FullMeta'] > 0){ switch ($spremenljivka['tip']) { case '2': case '6': $variable_label = substr($spremenljivka['naslov'],0,30).': '.$variable['naslov']; $_variable = preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $variable['variable']); break; case '7': if (isset($spremenljivka['enota'])) { $variable_label= substr($spremenljivka['naslov'],0,30) .' ('.$variable['naslov'].')'; } else { $variable_label= substr($spremenljivka['naslov'],0,30) ; } $_variable = preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $variable['variable']); break; case '16': case '19': case '20': $variable_label= substr($spremenljivka['naslov'],0,15) .': '.$grid['naslov'].': '.$variable['naslov']; $_variable = preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $variable['variable']); break; case '21': $variable_label= substr($spremenljivka['naslov'],0,30) .' ('.$variable['naslov'].')'; $_variable = preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $variable['variable']); break; default: $variable_label = $variable['naslov']; $_variable = preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $variable['variable']); break; } if($variable['other'] == 1 && $variable['text'] == 1) { $variable_label .= ' '.$lang['srv_sppss_text_other']; } $variable_label = $this->getCleanString($variable_label); // Language meta moramo preimenovati za spss, ker drugace je podvojen z language spremenljivko if($variable['variable'] == 'Language') $resultString .= 'VARIABLE LABELS Language_meta \''.$variable_label.'\' .'.NEW_LINE; else $resultString .= 'VARIABLE LABELS '.$_variable.' \''.$variable_label.'\' .'.NEW_LINE; } } } } } } $resultString .=NEW_LINE; } # labele vrednosti ==> VALUE LABELS # seznam label vrednosti spremenljivk (pika na koncu vsakega sklopa) if (count($this->_HEADERS) > 0) { foreach ($this->_HEADERS AS $spid => $spremenljivka) { if (isset($this->_SVP_PV[$spid]) && count($spremenljivka['grids']) > 0) { if (isset($spremenljivka['options'])) { $resultString .= 'VALUE LABELS'; foreach ($spremenljivka['grids'] AS $gid => $grid) { if (count($grid['variables']) > 0) { foreach ($grid['variables'] AS $vid => $variable ){ if(($spremenljivka['tip'] !== 'sm' && $spremenljivka['tip'] !== 'm') || $this->exportSettings['FullMeta'] > 0){ if ($variable['other'] != 1) { $variable = $this->getCleanString($variable['variable']); $resultString .= ' '.preg_replace ("/[^a-zA-Z0-9_\/]/", "_", $variable); } } } } } // pspp ne mara newline, hoče presledek vmes. if ($pspp == false) $resultString .= NEW_LINE; else $resultString .= ' '; if (count($spremenljivka['options']) > 0) { foreach ($spremenljivka['options'] AS $okey =>$option) { if(($spremenljivka['tip'] !== 'sm' && $spremenljivka['tip'] !== 'm') || $this->exportSettings['FullMeta'] > 0){ if ($spremenljivka['tip'] == 2 || $spremenljivka['tip'] == 16) { # pri čekboxu prevedemo if ($pspp == false){ $resultString .= $okey. ' \''.$lang['srv_sppss_checkbox_value_'.$option].'\''.NEW_LINE; } else { $resultString .= $okey. ' \''.$lang['srv_sppss_checkbox_value_'.$option].'\''.' '; } } else { $option = $this->getCleanString($option); if ($pspp ==false) $resultString .= $okey. ' \''.$option.'\''.NEW_LINE; else { if (strpos ($option, "'")===false) { $resultString .= $okey. ' \''.$option.'\''.' '; } else { $resultString .= $okey. ' \"'.str_replace ("'", "'", $option) .'\"'.' '; } } } } } } $resultString .='.'.NEW_LINE.NEW_LINE; } } } } # missing vrednosti ==> MISSING VALUES # seznam - razpon mising vrednosti ( pika na koncu ukaza) /* * Manjkajoče vrednosti se definirajo samo za številske (format F) spremenljivke, saj določanje intervala za * tekstovne (format A) ni podprto. Interval manjkajočih vrednosti označi uporabnik v vmesniku za izvoz, privzeto * je od -999 do -1. Uporabnik lahko izbere tudi, da ne želi definirati manjkajočih vrednosti – v tem primeru se * spodnja koda ne vključi v sintakso. * MISSING VALUES Q1 Q2 (...) Qn (a thru b). * Q1, Q2, ..., Qn: imena številskih spremenljivk. */ $_unset = SurveyMissingValues::GetUnsetValuesForSurvey(); $_missings = SurveyMissingValues::GetMissingValuesForSurvey(); #poiščemo razpon missingov, najmanjči in največji $_min = null; $_max = null; if (count($_unset) > 0) { foreach ( $_unset AS $key => $_mising_value) { $_min = ($_min == null) ? $key : min($_min,$key); $_max = ($_max == null) ? $key : max($_max,$key); } } if (count($_missings) > 0) { foreach ( $_missings AS $key => $_mising_value) { $_min = ($_min == null) ? $key : min($_min,$key); $_max = ($_max == null) ? $key : max($_max,$key); } } if ($_min == null) $_min = -99; # privzeto if ($_max == null) $_max = -1; # privzeto if (count($this->_HEADERS) > 0 && $_value_labels_numbers != '') { $resultString .='MISSING VALUES '; $resultString .= $_value_labels_numbers . ' ('.$_min.' thru '.$_max.')'; $resultString .='.'.NEW_LINE.NEW_LINE; } # missing labele ==> ADD VALUE LABELS # seznam label za missinge ( pika na koncu seznama) Naredimo dvakrat, 1x za števila in 1x za texte /** Labele za manjkajoče vrednosti se definirajo za številska in besedilna vprašanja in sicer ločeno. * Labele se dobijo iz sistemskih nastavitev manjkajočih vrednosti v 1KA (npr. neodgovor itd.) */ # za number odgovore if ( (count($_missings)+count($_unset)) > 0 && $_value_labels_numbers != '') { if ($pspp == false) $resultString .='ADD VALUE LABELS ' . $_value_labels_numbers.NEW_LINE; else $resultString .='VALUE LABELS ' . $_value_labels_numbers.' '; if (count($_missings) > 0) { foreach ( $_missings AS $mkey => $missing_value) { if ($pspp == false) $resultString .= $mkey . ' \'' . $this->getCleanString($missing_value).'\''.NEW_LINE; else { if (strpos ($this->getCleanString($unset_value), "'")===false) { $resultString .= $mkey . ' "' . $this->getCleanString($missing_value).'"'.' '; } else { $resultString .= $mkey . ' "' . str_replace ("'", "'", $this->getCleanString($missing_value)) .'"'.' '; } } } } if (count($_unset) > 0) { foreach ( $_unset AS $ukey => $unset_value) { if ($pspp == false) $resultString .= $ukey . ' \'' . $this->getCleanString($unset_value).'\''.NEW_LINE; else { if (strpos ($this->getCleanString($unset_value), "'")===false) { $resultString .= $ukey . ' \'' . $this->getCleanString($unset_value).'\''.' '; } else { $resultString .= $ukey . ' "' . str_replace ("'", "'", $this->getCleanString($unset_value)).'"'.' '; } } } } $resultString .='.'.NEW_LINE.NEW_LINE; } # za tekstovne odgovore prekodiramo missinge // ne smeš, ker prideš preko dovoljene dolžine. V A5 pač ne gre 20 znakov... // SPSS ima sicer komando "alter" za spremeniti string, ampak ker pspp ne podpira, delam labele! if ( (count($_missings)+count($_unset)) > 0 && $_value_labels_text != '') { $cnt = 1; $resultString .= 'VALUE LABELS ' .$_value_labels_text .' '.NEW_LINE; if (count($_missings) > 0) { foreach ( $_missings AS $mkey => $missing_value) { $resultString .= '\'' .$mkey . '\' \'' .$mkey . ': '. $this->getCleanString($missing_value).'\' '; $resultString .= NEW_LINE; } } if (count($_unset) > 0) { foreach ( $_unset AS $ukey => $unset_value) { if ($pspp == false){ $resultString .= '\'' . $ukey . '\' \'' . $ukey . ': '. $this->getCleanString($unset_value).'\' '; $resultString .= NEW_LINE; } } } $resultString .= '.' . NEW_LINE.NEW_LINE; } if ($mode != "download") { $resultString .= 'SAVE /OUTFILE \'' .$this->folder .'tmp_spss2sav' .$this->sid .'.SAV\'.' .NEW_LINE; } # povrnemo narejene spremembe v spssu $resultString .='EXECUTE.'.NEW_LINE; $resultString .='RESTORE.'; $convertType = 1; // kateri tip konvertiranja uporabimo $convertTypes[1] = array('charSet' => "windows-1250", 'delimit' => ";", 'newLine' => "\n", 'BOMchar' => "\xEF\xBB\xBF"); // downloadaj if ($mode == "download") { ob_clean(); header('Content-type: text/plain; charset='.$convertTypes[$convertType]['charSet']); header('Content-Disposition: attachment; filename="anketa'.$this->sid.'-'.date('Y-m-d').'.sps"'); # header("Content-length: $fsize"); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private',false); header('Content-Transfer-Encoding:­ binary'); ob_flush(); #$resultString = iconv("UTF-8", "CP1250", $resultString); # dodami boomchar za utf-8 echo $convertTypes[$convertType]['BOMchar']; echo $resultString; } // shrani nekam na disk če imaš "save" namesto "download" else { $fh = fopen($this->folder .'tmp_spss2sav' .$this->sid.'.sps', 'w'); fwrite($fh, $resultString); fclose($fh); } // end if data = false } else { #lovimo podatke // | -> \x7C // ` -> \x60 // ' -> \x27 // " -> \x22 $tmp_files = array( 'original' => $this->_dataFileName, 'first' => $this->_dataFileName.'_first', 'first1' => $this->_dataFileName.'_first_1', 'second' => $this->_dataFileName.'_second', 'third' => $this->_dataFileName.'_third', 'fourth' => $this->_dataFileName.'_fourth'); if (IS_WINDOWS) { # polovimo vrstice z statusom $cmdLn1 = 'awk -F"'.STR_DLMT.'" "'.$this->_CURRENT_STATUS_FILTER.' {print $0}" '.$tmp_files['original'].' > '.$tmp_files['first']; #filtri spremenljivk $cmdLn1_1 = 'cut -d "|" -f '.$this->_VARIABLE_FILTER.' '.$tmp_files['first'].' > '.$tmp_files['first1']; #zamenjamo ' => ` $cmdLn2 = 'sed "s/\x27/\x60/g" '.$tmp_files['first1'].' > '.$tmp_files['second']; # zamenjamo | z ' ' $cmdLn3 = 'sed "s/'.STR_DLMT.'/\x27 \x27/g" '.$tmp_files['second'].' > '.$tmp_files['third']; # dodamo ' na začetek in konec $cmdLn4 = 'awk '.$this->_QUOTE.'{print \"\'\"$0\"\'\"}'.$this->_QUOTE.' '.$tmp_files['third'].' > '.$tmp_files['fourth']; } else { # polovimo vrstice z statusom $cmdLn1 = "awk -F'\x7C' '".$this->_CURRENT_STATUS_FILTER." {print $0}' ".$tmp_files['original'].' > '.$tmp_files['first']; #filtri spremenljivk $cmdLn1_1 = 'cut -d \'|\' -f '.$this->_VARIABLE_FILTER.' '.$tmp_files['first'].' > '.$tmp_files['first1']; #zamenjamo ' => ` $cmdLn2 = 'sed \'s/\x27/\x60/g\' '.$tmp_files['first1'].' > '.$tmp_files['second']; # zamenjamo | z ' ' $cmdLn3 = 'sed \'s/'.STR_DLMT.'/\x27 \x27/g\' '.$tmp_files['second'].' > '.$tmp_files['third']; # dodamo ' na začetek in konec $this->_QUOTE = '\''; $cmdLn4 = 'awk \'{print "\x27"$0"\x27"}\' '.$tmp_files['third'].' > '.$tmp_files['fourth']; } $out1 = shell_exec($cmdLn1); $out1_1 = shell_exec($cmdLn1_1); $out2 = shell_exec($cmdLn2); $out3 = shell_exec($cmdLn3); $out4 = shell_exec($cmdLn4); if ($_GET['debug'] == 1) { print_r('
'.$cmdLn1); print_r('
'.$cmdLn2); print_r('
'.$cmdLn3); print_r('
'.$cmdLn4); } # nardimo output $convertType = 1; // kateri tip konvertiranja uporabimo $convertTypes[1] = array('charSet' => "windows-1250", 'delimit' => ";", 'newLine' => "\n", 'BOMchar' => "\xEF\xBB\xBF"); if ($mode == "download") { # izvedemo download if ($fd = fopen ($tmp_files['fourth'], "r")) { ob_clean(); $fsize = filesize($tmp_files['fourth']); $path_parts = pathinfo($tmp_files['fourth']); $ext = strtolower($path_parts["extension"]); header('Content-type: text/plain; charset='.$convertTypes[$convertType]['charSet']); header('Content-Disposition: attachment; filename="anketa'.$this->sid.'-'.date('Y-m-d').'_podatki.txt"'); #header("Content-length: $fsize"); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private',false); header('Content-Transfer-Encoding:­ binary'); ob_flush(); # dodami boomchar za utf-8 echo $convertTypes[$convertType]['BOMchar']; while(!feof($fd)) { $buffer = fread($fd, 2048); echo $buffer; } } else { echo "Napaka"; } fclose ($fd); } // priprava za SAV else { copy ($tmp_files['fourth'], $this->folder .'tmp_spss2sav' .$this->sid.'.a00'); } #pobrišemo vse tmp datoteke if (file_exists($tmp_files['first'])) { unlink($tmp_files['first']); } if (file_exists($tmp_files['first1'])) { unlink($tmp_files['first1']); } if (file_exists($tmp_files['second'])) { unlink($tmp_files['second']); } if (file_exists($tmp_files['third'])) { unlink($tmp_files['third']); } if (file_exists($tmp_files['fourth'])) { unlink($tmp_files['fourth']); } } // end if data = true } else { } if ($mode == "download") { ob_flush(); exit; } else { return; } } /** Preveri ali obstajata datoteki z podatki in headerji in ali sta zadnji ažurni * */ public function checkFile() { $SDF = SurveyDataFile::get_instance(); $SDF->init($this->sid); $this->_headFileName = $SDF->getHeaderFileName(); $this->_dataFileName = $SDF->getDataFileName(); $this->_fileStatus = $SDF->getStatus(); return $this->_fileStatus; } private function create_array_SPSS($max_missing) { $array_SPSS = array(); $db_table = ($this->survey['db_table'] == 1) ? '_active' : ''; # poberemo max dolžine iz srv_data_text max(text1,text2) $str_query = 'SELECT dt.spr_id, MAX(LENGTH(dt.text)) AS length, MAX(LENGTH(dt.text2)) AS length2 FROM srv_data_text'.$db_table.' dt, srv_grupa g, srv_spremenljivka s WHERE dt.spr_id = s.id AND s.gru_id=g.id AND g.ank_id='.$this->sid.' GROUP BY dt.spr_id'; $_qry_SPSS = sisplet_query($str_query); while (list($spr_id,$text,$text2) = mysqli_fetch_row($_qry_SPSS)) { $array_SPSS[$spr_id] = max((int)$text,(int)$text2,$max_missing); } $str_query = 'SELECT dt.spr_id, MAX(LENGTH(dt.text)) AS length FROM srv_data_textgrid'.$db_table.' AS dt, srv_grupa g, srv_spremenljivka s WHERE dt.spr_id = s.id AND s.gru_id=g.id AND g.ank_id='.$this->sid.' GROUP BY dt.spr_id'; $_qry_SPSS = sisplet_query($str_query); while (list($spr_id,$text) = mysqli_fetch_row($_qry_SPSS)) { #$this->_array_SPSS[$spr_id]['text2'] = ((int)$text < $this->MISSING_MAX_LENGTH ? $this->MISSING_MAX_LENGTH :$text); $array_SPSS[$spr_id] = max((int)$text,$array_SPSS[$spr_id],$max_missing); } return $array_SPSS; } public function ajax() { if ($_GET['a'] == 'doexport') { self :: DoExport(); } } function getCleanString($string) { // Replace quotov $string = preg_replace ("/'/", "`", $string); // Max dolžina stringa je 240 znakov $string = $this->splitStringIntoLines($string); return $string; } // Max dolžina stringa je 200 znakov - razbijemo v chunke za spss private function splitStringIntoLines($string){ if(strlen($string) <= 200) return $string; $new_string = chunk_split($string, 200, '\'+'.NEW_LINE.'\''); $new_string = substr($new_string, 0, -4); return $new_string; } private function getVariableLabels($spr_id){ global $lang; $s = sisplet_query("SELECT tip FROM srv_spremenljivka WHERE id = '$spr_id'"); $r = mysqli_fetch_array($s); if ( in_array($r['tip'], array(1, 3)) ) { $output = array(); $output['spr'] = $spr_id; $output['tip'] = $r['tip']; $output['values'] = array(); $sql = sisplet_query("SELECT naslov, variable FROM srv_vrednost WHERE spr_id='$spr_id' ORDER BY vrstni_red ASC"); while ($row = mysqli_fetch_array($sql)) { $output['values'][$row['variable']] = strip_tags( $row['naslov'] ); } $output['values']['-1'] = $lang['srv_bottom_data_legend_note_li1a']; $output['values']['-2'] = $lang['srv_bottom_data_legend_note_li2a']; $output['values']['-3'] = $lang['srv_bottom_data_legend_note_li3a']; $output['values']['-4'] = $lang['srv_bottom_data_legend_note_li4a']; $output['values']['-5'] = $lang['srv_bottom_data_legend_note_li5a']; $response[] = $output; } elseif ( in_array($r['tip'], array(6, 16)) ) { $output = array(); $output['spr'] = $spr_id; $output['tip'] = $r['tip']; $output['values'] = array(); $sql = sisplet_query("SELECT naslov, variable FROM srv_grid WHERE spr_id='$spr_id' ORDER BY vrstni_red ASC"); while ($row = mysqli_fetch_array($sql)) { $output['values'][$row['variable']] = strip_tags( $row['naslov'] ); } $output['values']['-1'] = $lang['srv_bottom_data_legend_note_li1a']; $output['values']['-2'] = $lang['srv_bottom_data_legend_note_li2a']; $output['values']['-3'] = $lang['srv_bottom_data_legend_note_li3a']; $output['values']['-4'] = $lang['srv_bottom_data_legend_note_li4a']; $output['values']['-5'] = $lang['srv_bottom_data_legend_note_li5a']; $response[] = $output; } return $response; } } ?>