ul evealvacija if ((int)$anketa > 0){ $this->anketa = $anketa; # polovimo vrsto tabel (aktivne / neaktivne) SurveyInfo :: getInstance()->SurveyInit($this->anketa); $this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString(); // Nastavimo se ustrezne parametre za skripto glede na tip izvoza (ime skripte, pdf-ja, csv-ja) $this->setExecuteParams(); } // Poskrbimo za datoteko s podatki $SDF = SurveyDataFile::get_instance(); $SDF->init($this->anketa); $SDF->prepareFiles(); } // Nastavimo se ustrezne parametre za skripto glede na tip izvoza (ime skripte, pdf-ja, csv-ja) private function setExecuteParams(){ $modules = SurveyInfo::getInstance()->getSurveyModules(); // QUALTIY CLIMATE if(isset($modules['evoli_quality_climate'])){ $this->submodule = 'evoli_quality_climate'; $this->submodule_name = 'Quality climate'; $this->submodule_form = 'quality_climate_form.php'; $this->execute_params['csv_name'] = 'quality_climate.csv'; // DANSCINA if(isset($_GET['lang_id']) && $_GET['lang_id'] == '29'){ $this->execute_params['script_name'] = 'Evoli_quality_clime_dan.R'; $this->execute_params['pdf_name'] = 'Kvalitetsklima.pdf'; } // SLOVENSCINA elseif(isset($_GET['lang_id']) && $_GET['lang_id'] == '1'){ $this->execute_params['script_name'] = 'Evoli_quality_clime_slo.R'; $this->execute_params['pdf_name'] = 'Klima-kakovosti.pdf'; } // ANGLESCINA else{ $this->execute_params['script_name'] = 'Evoli_quality_clime_ang.R'; $this->execute_params['pdf_name'] = 'Quality-climate.pdf'; } } // TEAMSHIP METER elseif(isset($modules['evoli_teamship_meter'])){ $this->submodule = 'evoli_teamship_meter'; $this->submodule_name = 'Teamship meter'; $this->submodule_form = 'teamship_meter_form.php'; $this->execute_params['csv_name'] = 'evoli_teamship.csv'; // DANSCINA if(isset($_GET['lang_id']) && $_GET['lang_id'] == '29'){ $this->execute_params['script_name'] = 'Evoli_teamship_meter_dan.R'; $this->execute_params['pdf_name'] = 'Teamship-Meter-dan.pdf'; } // SLOVENSCINA elseif(isset($_GET['lang_id']) && $_GET['lang_id'] == '1'){ $this->execute_params['script_name'] = 'Evoli_teamship_meter_slo.R'; $this->execute_params['pdf_name'] = 'Teamship-Meter-slo.pdf'; } // ANGLESCINA else{ $this->execute_params['script_name'] = 'Evoli_teamship_meter_ang.R'; $this->execute_params['pdf_name'] = 'Teamship-Meter-ang.pdf'; } } // ORGANIZATIONAL EMPLOYEESHIP METER elseif(isset($modules['evoli_organizational_employeeship_meter'])){ $this->submodule = 'evoli_organizational_employeeship_meter'; $this->submodule_name = 'Organizational employeeship meter'; $this->submodule_form = 'organizational_employeeship_meter_form.php'; $this->execute_params['csv_name'] = 'evoli_team.csv'; // DANSCINA if(isset($_GET['lang_id']) && $_GET['lang_id'] == '29'){ $this->execute_params['script_name'] = 'Evoli_org_employ_meter_dan.R'; $this->execute_params['pdf_name'] = 'Org-Employeeship-Meter-dan.pdf'; } // SLOVENSCINA elseif(isset($_GET['lang_id']) && $_GET['lang_id'] == '1'){ $this->execute_params['script_name'] = 'Evoli_org_employ_meter_slo.R'; $this->execute_params['pdf_name'] = 'Org-Employeeship-Meter-slo.pdf'; } // ANGLESCINA else{ $this->execute_params['script_name'] = 'Evoli_org_employ_meter_ang.R'; $this->execute_params['pdf_name'] = 'Org-Employeeship-Meter-ang.pdf'; } } // TEAM METER else{ $this->submodule = 'evoli_teammeter'; $this->submodule_name = 'Team meter'; $this->submodule_form = 'team_meter_form.php'; $this->execute_params['csv_name'] = 'evoli_team.csv'; // DANSCINA if(isset($_GET['lang_id']) && $_GET['lang_id'] == '29'){ $this->execute_params['script_name'] = 'Evoli_team_meter_depart_dan.R'; $this->execute_params['pdf_name'] = 'Team-Energy-Meter-dan.pdf'; } // SLOVENSCINA elseif(isset($_GET['lang_id']) && $_GET['lang_id'] == '1'){ $this->execute_params['script_name'] = 'Evoli_team_meter_depart_slo.R'; $this->execute_params['pdf_name'] = 'Team-Energy-Meter-slo.pdf'; } // ANGLESCINA else{ $this->execute_params['script_name'] = 'Evoli_team_meter_depart_ang.R'; $this->execute_params['pdf_name'] = 'Team-Energy-Meter-ang.pdf'; } } } public function displaySettings(){ echo '
'; // Izpisemo doloceno skupino if(isset($_GET['skupina'])) $this->displaySettingsSkupina($_GET['skupina']); else $this->displaySettingsAll(); } // Prikazemo tabelo vseh skupin/podjetij private function displaySettingsAll(){ global $site_path; global $lang; global $admin_type; echo '
'.$this->submodule_name.' skupine'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // Izpisemo vse skupine z moznostjo izvoza porocil $sql1 = sisplet_query("SELECT tm.*, v.naslov, v.vrstni_red FROM srv_evoli_teammeter tm, srv_vrednost v WHERE tm.ank_id='".$this->anketa."' AND v.id=tm.skupina_id"); while ($row1 = mysqli_fetch_assoc($sql1)) { echo ''; //var_dump($row1); echo ''; echo ''; if($row1['lang_id'] == 2) $language = 'Eng'; elseif($row1['lang_id'] == 29) $language = 'Den'; else $language = 'Slo'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // PDF porocilo - samo ce imamo vsaj en vnos za skupino echo ''; // Datum posiljanja porocila echo ''; echo ''; echo ''; } echo '
EmailSkupinaJezikMaksimalna kvotaDosežena kvotaZačetekKonecURLPoročiloDatum pošiljanjaUrejanje
'.$row1['email'].''.$row1['naslov'].'
('.$row1['vrstni_red'].' - id '.$row1['skupina_id'].')
'.$language.'
(id '.$row1['lang_id'].')
'.$row1['kvota_max'].''.$row1['kvota_val'].''.$row1['date_from'].''.$row1['date_to'].''.$row1['url'].''; if($row1['kvota_val'] > 0) echo ''; echo ''; if($row1['datum_posiljanja'] != '0000-00-00 00:00:00') echo date('d.m.Y H:i:s', strtotime($row1['datum_posiljanja'])); else echo 'Poročilo še ni bilo poslano'; echo 'Uredi
'; echo '
'; } // Prikazemo tabelo respnsov za doloceno skupino/podjetje private function displaySettingsSkupina($skupina_id){ global $site_path; global $site_url; global $lang; global $admin_type; echo '<< Nazaj na splošne nastavitve'; echo '

'; // Preberemo vse podatke za skupino $sql = sisplet_query("SELECT tm.*, v.naslov AS skupina_naslov FROM srv_evoli_teammeter tm, srv_vrednost v WHERE tm.ank_id='".$this->anketa."' AND tm.skupina_id='".$skupina_id."' AND v.id=tm.skupina_id"); if (!$sql) echo mysqli_error($GLOBALS['connect_db']); $row = mysqli_fetch_assoc($sql); // Urejanje osnovnih podatkov skupine echo '
'.$this->submodule_name.' - skupina "'.$row['skupina_naslov'].'"'; echo '

URL:'.$row['url'].'

'; if($row['lang_id'] == 2) $language = 'eng'; elseif($row['lang_id'] == 29) $language = 'den'; else $language = 'slo'; echo '

Jezik:'.$language.' ('.$row['lang_id'].')

'; echo '

Dosežena kvota: '.$row['kvota_val'].'

'; echo '

Maksimalna kvota:

'; echo '
'; $date_from = date("d.m.Y", strtotime($row['date_from'])); echo '

Datum začetka: '.$date_from.'
'; $date_to = date("d.m.Y", strtotime($row['date_to'])); echo '

Datum konca:

'; $datum_posiljanja = date("d.m.Y H:i:s", strtotime($row['datum_posiljanja'])); echo '

Datum pošiljanja vabil: '.$datum_posiljanja.'

'; echo ''; echo '
'; // Preberemo vse oddelke za skupino $oddelki = array(); $sqlD = sisplet_query("SELECT * FROM srv_evoli_teammeter_department WHERE tm_id='".$row['id']."'"); //echo 'Oddelki (Dodaj oddelek): '; echo '

Oddelki: '; $oddelki_string = ''; while($rowD = mysqli_fetch_assoc($sqlD)) { $oddelki[$rowD['id']] = $rowD['department']; $oddelki_string .= $rowD['department'].', '; } if($oddelki_string != '') echo substr($oddelki_string, 0, -2); else echo '
'; echo '

'; // Dodaj nov oddelek echo '

'; echo 'Dodaj nov oddelek: '; echo ' Dodaj'; echo ' (Naknadno brisanje oddelkov ni mogoče!)'; echo '

'; echo '
'; // Naknadno posiljanje vabil // https://tools.evoli.si/admin/survey/modules/mod_EVOLI/team_meter.php?ank_id=SURVEY_ID&email=CLIENT_EMAIL&departments=1&language=slo&pass=GENERATED_PASSWORD $url = $site_url.'admin/survey/modules/mod_EVOLI/forms/'.$this->submodule_form.'?'; $url .= 'ank_id='.$this->anketa; $url .= '&language='.$language; $url .= '&email='.$row['email']; $url .= '&group_id='.$row['skupina_id']; $url .= '&pass=evoli99admin'; echo '
'; echo 'Naknadno pošiljanje vabil'; echo '
'; echo '

'; echo '
'; echo '
'; // Urejanje responsov skupine (lahko urejamo oddelke) echo '
'.$this->submodule_name.' - odgovori skupine "'.$row['skupina_naslov'].'"'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $sqlDD = sisplet_query("SELECT d.*, dd.usr_id, u.email, u.recnum FROM srv_evoli_teammeter tm, srv_evoli_teammeter_department d, srv_evoli_teammeter_data_department dd, srv_user u WHERE tm.ank_id='".$this->anketa."' AND tm.skupina_id='".$skupina_id."' AND d.tm_id=tm.id AND dd.department_id=d.id AND dd.usr_id=u.id ORDER BY u.email"); if (!$sqlDD) echo mysqli_error($GLOBALS['connect_db']); while($rowDD = mysqli_fetch_assoc($sqlDD)) { echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
RecnumEmailOddelek
'.$rowDD['recnum'].''.$rowDD['email'].'
'; echo '
'; // Link nazaj na splosne nastavitve echo '
'; echo '<< Nazaj na splošne nastavitve'; echo '

'; } // Zgeneriramo pdf analizo public function executeExport($skupina){ global $site_path; global $site_url; global $lang; global $admin_type; // Zgeneriramo zacasne csv datoteke $this->prepareCSV($skupina); // Poklicemo R skripto in zgeneriramo pdf $this->executeR($skupina); // Pripravimo file za download if(file_exists($site_path . RESULTS_FOLDER . '/'.$this->execute_params['pdf_name'])){ $file = $site_path . RESULTS_FOLDER . '/'.$this->execute_params['pdf_name']; header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename='.basename($this->execute_params['pdf_name'])); header("Content-type: text/x-csv; charset=utf-8"); 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 if(!$this->debug) $this->deleteTemp(); // Ugasnemo skripto:) die(); } // Poklicemo r skripto in vrnemo ime pdf-ja private function executeR($skupina){ global $site_path; $script = $site_path . SCRIPT_FOLDER . '/'.$this->execute_params['script_name']; // Parametri za R $params = $skupina; // Poklicemo skripto $out = exec('Rscript '.$script.' '.$params.' 2>&1', $output, $return_var); // Debugiranje - izpis errorjev if($this->debug && $admin_type == 0){ echo '
'; echo 'Rscript '.$script; //echo '
'.$out.'
'; var_dump($output); echo '
'; } return true; } // Pripravimo zacasne datoteke private function prepareCSV($skupina){ global $site_path; $temp_folder = $site_path . TEMP_FOLDER.'/'; // Poskrbimo za datoteko s podatki $SDF = SurveyDataFile::get_instance(); $SDF->init($this->anketa); $_headFileName = $SDF->getHeaderFileName(); $_dataFileName = $SDF->getDataFileName(); if ($_headFileName != null && $_headFileName != '') { $_HEADERS = unserialize(file_get_contents($_headFileName)); } else { echo 'Error! Empty file name!'; } // Zaenkrat dopuscamo samo status 6 in brez lurkerjev define('STATUS_FIELD', '$4'); define('LURKER_FIELD', '$5'); $status_filter = '('.STATUS_FIELD.' ~ /6|5/)&&('.LURKER_FIELD.'==0)'; //$status_filter = '($4 ~ /6|5/)&&($5==0)'; //$status_filter = '('.STATUS_FIELD.'==6)&&('.LURKER_FIELD.'==0)'; //$start_sequence = $_HEADERS['_settings']['dataSequence']; $start_sequence = 1; $end_sequence = $_HEADERS['_settings']['metaSequence']-1; $field_delimit = ';'; // Filtriramo podatke po statusu in jih zapisemo v temp folder if (IS_WINDOWS) { $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'); } else { $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'); } // Ustvarimo koncni CSV if ($fd = fopen($temp_folder.'/temp_data_'.$this->anketa.'.dat', "r")) { $fd2 = fopen($temp_folder.'/'.$this->execute_params['csv_name'], "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 $cnt = 0; 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; if(strip_tags($variable['variable']) == 'skupina') $skupina_pos = $cnt+1; $cnt++; } } } } } // Na konec dodamo se naslov skupine (podjetja) in oddelka $output1 .= 'skupina_ime'.$field_delimit; $output1 .= 'oddelek_ime'.$field_delimit; $output2 .= 'Ime podjetja'.$field_delimit; $output2 .= 'Ime oddelka'.$field_delimit; fwrite($fd2, $output1."\r\n"); fwrite($fd2, $output2."\r\n"); // Zakesiramo vse skupine za anketo $skupine = array(); $sqlS = sisplet_query("SELECT tm.*, v.naslov AS naslov, v.vrstni_red AS vrstni_red FROM srv_evoli_teammeter tm, srv_vrednost v WHERE tm.ank_id='".$this->anketa."' AND v.id=tm.skupina_id"); while ($rowS = mysqli_fetch_assoc($sqlS)) { $skupine[$rowS['vrstni_red']] = $rowS; } while ($line = fgets($fd)) { $skupina_name = ''; $department_name = ''; // Pogledamo za katero skupino gre in kateri oddelek $skupina_name = ''; $oddelek_name = ''; if($skupina_pos > 0){ $temp = array(); $temp = explode('|', $line); $usr_id = $temp[0]; $skupina = $temp[$skupina_pos]; // Ime skupine za tekoci response $skupina_name = $skupine[$skupina]['naslov']; // Ime oddelka za tekoci response $sqlO = sisplet_query("SELECT d.department FROM srv_evoli_teammeter_department d, srv_evoli_teammeter_data_department dd, srv_evoli_teammeter e WHERE dd.department_id=d.id AND dd.usr_id='".$usr_id."' AND e.skupina_id='".$skupine[$skupina]['skupina_id']."' AND e.id=d.tm_id AND e.ank_id='".$this->anketa."'"); if(mysqli_num_rows($sqlO) > 0){ $rowO = mysqli_fetch_assoc($sqlO); $oddelek_name = $rowO['department']; } else{ $oddelek_name = '-1'; } } $line = '"' . str_replace(array("\r","\n","\"","|"), array("","","",'";"'), $line) . '"'; // Pocistimo usr_id na zacetku vrstice $start_line = strpos($line, '"', 1) + 2; $line = substr($line, $start_line); // Dodamo na konec skupino in oddelek $line .= $field_delimit.'"'.$skupina_name.'"'; $line .= $field_delimit.'"'.$oddelek_name.'"'; // 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'); } } // Pobrisemo zacasne datoteke private function deleteTemp(){ global $site_path; $temp_folder = $site_path . TEMP_FOLDER.'/'; if (file_exists($temp_folder.'/data_'.$this->anketa.'.csv')) { unlink($temp_folder.'/data_'.$this->anketa.'.csv'); } // Pobrisemo zacasno CSV datoteko s podatki if (file_exists($temp_folder.'/evoli_team.csv')) { unlink($temp_folder.'/evoli_team.csv'); } // Pobrisemo pdf grafe ki so bili vstavljeni v porocilo $files = glob($site_path . RESULTS_FOLDER . '/part-predmet-slike/*'); foreach($files as $file){ if(is_file($file)) unlink($file); } $files = glob($site_path . RESULTS_FOLDER . '/slike/*'); foreach($files as $file){ if(is_file($file)) unlink($file); } // Pobrisemo še vse ostalo v rezultatih - azenkrat ne ker download pdf ne dela $files = glob($site_path . RESULTS_FOLDER . '/*'); foreach($files as $file){ if(is_file($file)) unlink($file); } } // Ajax klici public function ajax(){ // Urejanje skupine if($_GET['a'] == 'teammeter_edit'){ if(isset($_POST['tm_id']) && isset($_POST['what']) && isset($_POST['value'])){ $tm_id = $_POST['tm_id']; $what = $_POST['what']; $value = $_POST['value']; // Datum popravimo v ustrezno obliko if($what == 'date_to'){ $timestamp = strtotime($value); $value = date("Y-m-d", $timestamp); } $sql = sisplet_query("UPDATE srv_evoli_teammeter SET ".$what."='".$value."' WHERE id='".$tm_id."'"); } } // Dodajanje oddelka elseif($_GET['a'] == 'teammeter_add_oddelek'){ if(isset($_POST['tm_id']) && isset($_POST['oddelek']) && $_POST['oddelek'] != ''){ $tm_id = $_POST['tm_id']; $oddelek = $_POST['oddelek']; $sql = sisplet_query("INSERT INTO srv_evoli_teammeter_department (tm_id, department) VALUES ('".$tm_id."', '".$oddelek."')"); } } // Spreminjanje oddelka za respondenta elseif($_GET['a'] == 'teammeter_change_oddelek'){ if(isset($_POST['department_id']) && isset($_POST['usr_id'])){ $department_id = $_POST['department_id']; $usr_id = $_POST['usr_id']; // Lahko imamo vec oddelkov za istega userja (napaka ki jo je tesko popravit:)) - zato najprej pobirsemo vse $sql = sisplet_query("DELETE FROM srv_evoli_teammeter_data_department WHERE usr_id='".$usr_id."'"); // Potem nastavimo drug oddelek za respondenta $sql = sisplet_query("INSERT INTO srv_evoli_teammeter_data_department (usr_id, department_id) VALUES ('".$usr_id."', '".$department_id."')"); } } } }