anketa = $anketa; global $site_path; $this->site_path = $site_path; } public function izvoz($vrsta = 'word') { if (!empty($_GET['t']) && in_array($_GET['t'], ['word', 'pdf'])) $vrsta = $_GET['t']; // Samo za debug if (false && $admin_type == 0) { // R parametri za PDF if ($vrsta == 'pdf') { $script = $this->site_path . self::scriptFolder . 'test_1ka_pdf.R'; $content_type = 'text/x-csv; charset=utf-8'; $file_name = 'test.pdf'; }else{ // R parametri, za DOC,DOCX $script = $this->site_path . self::scriptFolder . 'test_1ka.R'; $content_type = 'application/octet-stream'; $file_name = 'test.docx'; } $out = exec('Rscript ' . $script . ' 2>&1', $output, $return_var); // Testiranje - izpis errorjev echo '
'; echo 'Rscript ' . $script; //echo '
'.$out.'
'; var_dump($output); echo '
'; // Pripravimo file za download if (file_exists($this->site_path . self::resultFolder . $file_name)) { $file = $this->site_path . self::resultFolder . $file_name; header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=' . basename($file_name)); header('Content-Type: '.$content_type); header("Content-Transfer-Encoding: Binary"); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); } } // Pripravi CSV s podatki $this->pripraviCSV(); $this->pripraviCSVuciteljev(); // R parametri, za DOC,DOCX $script = $this->site_path . self::scriptFolder . 'Hierarhija_1ka.R'; $content_type = 'application/octet-stream'; //Ime ankete $ime = slug(SurveyInfo::getSurveyTitle(), '_'); $file_name = 'SAMOEVALVACIJSKO_POROCILO__' . $ime . '.docx'; // R parametri za PDF if ($vrsta == 'pdf') { $script = $this->site_path . self::scriptFolder . 'Hierarhija_1ka_pdf.R'; $content_type = 'text/x-csv; charset=utf-8'; $file_name = 'SAMOEVALVACIJSKO_POROCILO_' . $ime . '.pdf'; } $shrani_id = HierarhijaQuery::getOptions($this->anketa, 'srv_hierarhija_shrani_id'); $logo = sisplet_query("SELECT logo FROM srv_hierarhija_shrani WHERE id='" . $shrani_id . "' AND anketa_id='" . $this->anketa . "'", "obj")->logo; // 1 - odgovori v anketami // 2 - seznam uciteljev in predmetov // 3 - ime datoteke v katero shranimo (pdf, docx) // 4 - logo $param = 'hierarhija_' . $this->anketa . '.csv hierarhija_ucitelji_' . $this->anketa . '.csv '. $file_name . ' ' . $logo; $out = exec('Rscript ' . $script . ' ' . $param . ' 2>&1', $output, $return_var); // Testiranje - izpis errorjev if ($admin_type == 0) { echo '
'; echo 'Rscript ' . $script; //echo '
'.$out.'
'; var_dump($output); echo '
'; } // Pripravimo file za download if (file_exists($this->site_path . self::resultFolder . $file_name)) { $file = $this->site_path . self::resultFolder . $file_name; header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=' . basename($file_name)); header('Content-Type: '.$content_type); header("Content-Transfer-Encoding: Binary"); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); } // Na koncu pobrisemo zacasne datoteke $this->deleteTemp(); // Ugasnemo skripto:) die(); } /** * Pripravimo CSV izvoz vseh podatkov */ private function pripraviCSV() { $temp_folder = $this->site_path . self::tempFolder; $SDF = SurveyDataFile::get_instance(); $SDF->init($this->anketa); $_headFileName = $SDF->getHeaderFileName(); $_dataFileName = $SDF->getDataFileName(); $_fileStatus = $SDF->getStatus(); if(count(file($_dataFileName)) < 3){ global $site_url; echo 'Premalo podatkov'; redirect($site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&a=' . A_HIERARHIJA_SUPERADMIN . '&m=' . M_ANALIZE.'&error=invalid'); die(); } if ($_headFileName != null && $_headFileName != '') { $_HEADERS = unserialize(file_get_contents($_headFileName)); } else { echo 'Error! Empty file name!'; } // Zaenkrat dopuscamo samo status 6 in brez lurkerjev $status_filter = '(' . STATUS_FIELD . ' ~ /6|5/)&&(' . LURKER_FIELD . '==0)'; //$status_filter = '('.STATUS_FIELD.'==6)&&('.LURKER_FIELD.'==0)'; //$start_sequence = $_HEADERS['_settings']['dataSequence']; $start_sequence = 2; $end_sequence = $_HEADERS['_settings']['metaSequence'] - 1; $field_delimit = ';'; // Pridobi filtre // $hierarhija_analize = (new \HierarhijaAnalysis($this->anketa)); // $hierarhija_filter = $hierarhija_analize->filterHierarhijeIzTekstovneDatoteke(); // $ucitelj_filter = $hierarhija_analize->filterHierarhijeZaSpecificnegaUciteljaIzDatoteke(); // (!empty($ucitelj_filter) ? $ucitelj_filter : $hierarhija_filter) // preveri izpis conzole // Filtriramo podatke po statusu in jih zapisemo v temp folder $out = shell_exec('awk -F"|" \'BEGIN {{OFS=","} {ORS="\n"}} ' . $status_filter . '\' ' . $_dataFileName . ' | cut -d \'|\' -f ' . $start_sequence . '-' . $end_sequence . ' >> ' . $temp_folder . 'temp_data_' . $this->anketa . '.dat'); // dump('awk -F"|" \'BEGIN {{OFS=","} {ORS="\n"}} '.$status_filter.'\' '.$_dataFileName.' | cut -d \'|\' -f '.$start_sequence.'-'.$end_sequence.' >> '.$temp_folder.'temp_data_'.$this->anketa.'.dat'); // Ustvarimo koncni CSV if ($fd = fopen($temp_folder . 'temp_data_' . $this->anketa . '.dat', "r")) { $fd2 = fopen($temp_folder . 'hierarhija_' . $this->anketa . '.csv', "w+"); $convertType = 1; // kateri tip konvertiranja uporabimo $convertTypes[1] = array('charSet' => 'windows-1250', 'delimit' => ';', 'newLine' => "\n", 'BOMchar' => "\xEF\xBB\xBF"); # dodamo boomchar za utf-8 fwrite($fd2, $convertTypes[$convertType]['BOMchar']); # naredimo header row foreach ($_HEADERS AS $spid => $spremenljivka) { if (count($spremenljivka['grids']) > 0) { foreach ($spremenljivka['grids'] AS $gid => $grid) { foreach ($grid['variables'] AS $vid => $variable) { if ($spremenljivka['tip'] !== 'sm' && !($variable['variable'] == 'uid' && $variable['naslov'] == 'User ID')) { $output1 .= strip_tags($variable['variable']) . $field_delimit; $output2 .= '"' . strip_tags($variable['naslov']) . '"' . $field_delimit; } } } } } fwrite($fd2, $output1 . "\r\n"); fwrite($fd2, $output2 . "\r\n"); while ($line = fgets($fd)) { $temp = array(); $temp = explode('|', $line); // Zamenjamo številke z vrednostmi predmetov hierarhije $grupaId = HierarhijaOnlyQuery::getGrupaId($this->anketa); // Pripravimo polje po katerem iščemo nivoje $stRavni = sisplet_query("SELECT count('id') as st FROM srv_hierarhija_ravni WHERE anketa_id = '" . $this->anketa . "'", "obj")->st; $isci_po_polju = "'nivo1'"; for ($i = 2; $i <= $stRavni; $i++) { $isci_po_polju .= ",'nivo" . $i . "'"; } $elementi_hierarhije = sisplet_query("SELECT id, variable FROM srv_spremenljivka WHERE gru_id='" . $grupaId . "' AND variable IN (" . $isci_po_polju . ") ORDER BY vrstni_red", "obj"); // od 8 elementa v txt datoteki se začne naprej hierarhija $line_explode = explode('|', $line); // številka prvega elementa, ki ga bomo zamenjali - vloga $st = 9; foreach ($elementi_hierarhije as $element) { $ime_strukture = sisplet_query("SELECT naslov FROM srv_vrednost WHERE spr_id='" . $element->id . "' AND variable='" . $line_explode[$st] . "'", "obj")->naslov; $line_explode[$st] = $ime_strukture; $st++; } $line = join('|', $line_explode); $line = '"' . str_replace(array("\r", "\n", "\"", "|"), array("", "", "", '";"'), $line) . '"'; // Spremenimo encoding v windows-1250 //$line = iconv("UTF-8","Windows-1250//TRANSLIT", $line); fwrite($fd2, $line); fwrite($fd2, "\r\n"); } fclose($fd2); } fclose($fd); // Na koncu pobrisemo temp datoteke if (file_exists($temp_folder . '/temp_data_' . $this->anketa . '.dat')) { unlink($temp_folder . '/temp_data_' . $this->anketa . '.dat'); } } /** * Izvoz hierarhije učiteljev z imenomin priimkom ter elektronskim naslovom */ private function pripraviCSVuciteljev(){ $ucitelji = HierarhijaIzvoz::getInstance($this->anketa)->csvIzvozStruktureZaObdelavo(true); $temp_folder = $this->site_path . self::tempFolder; $file = fopen($temp_folder . 'hierarhija_ucitelji_' . $this->anketa . '.csv', "w+"); $convertType = 1; // kateri tip konvertiranja uporabimo $convertTypes[1] = array('charSet' => 'windows-1250', 'delimit' => ';', 'newLine' => "\n", 'BOMchar' => "\xEF\xBB\xBF"); # dodamo boomchar za utf-8 fwrite($file, $convertTypes[$convertType]['BOMchar']); foreach($ucitelji as $ucitelj){ fputcsv($file, $ucitelj); } fclose($file); } private function deleteTemp() { $temp_folder = $this->site_path . self::tempFolder; // Pobriše CSV datoteko if (file_exists($temp_folder . '/hierarhija' . $this->anketa . '.csv')) unlink($temp_folder . '/hierarhija' . $this->anketa . '.csv'); // Pobriše CSV datoteko uciteljev if (file_exists($temp_folder . '/hierarhija_ucitelji_' . $this->anketa . '.csv')) unlink($temp_folder . '/hierarhija_ucitelji_' . $this->anketa . '.csv'); // Pobrisemo še vse v rezultatih $files = glob($this->site_path . self::resultFolder . '*'); foreach ($files as $file) { if (is_file($file)) unlink($file); } } }