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 'Email ';
echo 'Skupina ';
echo 'Jezik ';
echo 'Maksimalna kvota ';
echo 'Dosežena kvota ';
echo 'Začetek ';
echo 'Konec ';
echo 'URL ';
echo 'Poročilo ';
echo 'Datum pošiljanja ';
echo 'Urejanje ';
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 ''.$row1['email'].' ';
echo ''.$row1['naslov'].' ('.$row1['vrstni_red'].' - id '.$row1['skupina_id'].') ';
if($row1['lang_id'] == 2)
$language = 'Eng';
elseif($row1['lang_id'] == 29)
$language = 'Den';
else
$language = 'Slo';
echo ''.$language.' (id '.$row1['lang_id'].') ';
echo ''.$row1['kvota_max'].' ';
echo ''.$row1['kvota_val'].' ';
echo ''.$row1['date_from'].' ';
echo ''.$row1['date_to'].' ';
echo ''.$row1['url'].' ';
// PDF porocilo - samo ce imamo vsaj en vnos za skupino
echo '';
if($row1['kvota_val'] > 0)
echo ' ';
echo ' ';
// Datum posiljanja porocila
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 ' ';
echo 'Uredi ';
echo ' ';
}
echo '
';
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 ' ';
echo ' ';
echo ' ';
// Urejanje responsov skupine (lahko urejamo oddelke)
echo ''.$this->submodule_name.' - odgovori skupine "'.$row['skupina_naslov'].'" ';
echo '';
echo '';
echo 'Recnum ';
echo 'Email ';
echo 'Oddelek ';
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 ''.$rowDD['recnum'].' ';
echo ''.$rowDD['email'].' ';
echo '';
foreach($oddelki as $key => $val){
echo ''.$val.' ';
}
echo ' ';
echo ' ';
}
echo '
';
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."')");
}
}
}
}