1KA_F2F/admin/survey/modules/mod_NIJZ/class.SurveyNIJZ.php

269 lines
8.0 KiB
PHP
Raw Normal View History

<?php
define("TEMP_FOLDER", "admin/survey/modules/mod_NIJZ/temp");
define("SCRIPT_FOLDER", "admin/survey/modules/mod_NIJZ/R");
define("RESULTS_FOLDER", "admin/survey/modules/mod_NIJZ/results");
class SurveyNIJZ{
private $anketa; // id ankete
private $usr_id; // id respondenta
private $db_table = '';
private $vprasanja_radar = array(); // array z vsemi vprasanji in odgovori na njih, ki jih obravnavamo
function __construct($anketa, $usr_id){
// Ce imamo anketo, smo v status->ul evealvacija
if ((int)$anketa > 0 && (int)$usr_id > 0){
// Nastavimo id ankete
$this->anketa = $anketa;
// Nastavimo id respondenta
$this->usr_id = $usr_id;
# polovimo vrsto tabel (aktivne / neaktivne)
SurveyInfo :: getInstance()->SurveyInit($this->anketa);
if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) {
$this->db_table = '_active';
}
}
else{
die();
//return false;
}
// Zakesiramo vprasanja z odgovori v array
$this->cacheData();
}
// Nastavimo imena vprasanj za vse teme (nijz radar)
private function cacheData(){
// Napolnimo vprasanja
$sql = sisplet_query("SELECT s.id, s.naslov, s.variable, s.label
FROM srv_spremenljivka s, srv_grupa g
WHERE s.gru_id=g.id AND g.ank_id='".$this->anketa."'
AND s.variable LIKE 'radar%'");
while($row = mysqli_fetch_array($sql)){
$number = substr($row['variable'], 5);
$this->vprasanja_radar[$number]['id'] = $row['id'];
$this->vprasanja_radar[$number]['variable'] = $row['variable'];
$this->vprasanja_radar[$number]['naslov'] = $row['label'];
}
ksort($this->vprasanja_radar);
// Napolnimo odgovore za vse teme
foreach($this->vprasanja_radar as $st_vprasanja => $tema){
$sqlData = sisplet_query("SELECT v.naslov, v.variable
FROM srv_grupa g, srv_spremenljivka s, srv_vrednost v, srv_data_vrednost".$this->db_table." d
WHERE s.id='".$tema['id']."' AND g.ank_id='".$this->anketa."' AND d.usr_id='".$this->usr_id."'
AND s.id=v.spr_id AND s.gru_id=g.id AND d.vre_id=v.id AND d.spr_id=s.id
");
if(mysqli_num_rows($sqlData) == 1){
$rowData = mysqli_fetch_array($sqlData);
$this->vprasanja_radar[$st_vprasanja]['data'] = $rowData['variable'];
}
}
}
// Prikazemo radar graf po temah
public function displayRadar(){
global $lang;
2021-04-26 12:26:32 +02:00
global $site_url;
$this->createRadar();
// CSS:)
echo '<style>
.nijz_radar_holder{
text-align: center;
}
.nijz_radar_holder h1.radar_title{
padding-top: 20px;
}
.nijz_radar_holder img{
}
</style>';
echo '<div class="spremenljivka nijz_radar_holder">';
2021-04-28 11:06:19 +02:00
echo '<h1 class="nijz_title radar_title">Bivalno okolje</h1>';
2021-04-26 12:26:32 +02:00
echo '<img src="'.$site_url.RESULTS_FOLDER.'/radar_'.$this->usr_id.'.png">';
echo '</div>';
}
// Prikazemo tabelo po temah
public function displayTable(){
global $lang;
// CSS:)
echo '<style>
.nijz_table_holder{
}
.nijz_table_holder h1.table_title{
padding-top: 20px;
}
.nijz_table_holder table.nijz_table{
border-collapse: collapse;
margin: 0 auto;
}
.nijz_table_holder table.nijz_table tr{
}
.nijz_table_holder table.nijz_table tr td{
padding: 8px 12px;
max-width: 400px;
font-weight: 600;
font-size: 17px;
border: 1px #505050 solid;
}
.nijz_table_holder table.nijz_table tr td.tema1{ color: #9966cc; }
.nijz_table_holder table.nijz_table tr td.tema2{ color: #cc0099; }
.nijz_table_holder table.nijz_table tr td.tema3{ color: #FFD700; }
.nijz_table_holder table.nijz_table tr td.tema4{ color: #cc6699; }
.nijz_table_holder table.nijz_table tr td.tema5{ color: #FFA500; }
.nijz_table_holder table.nijz_table tr td.tema6{ color: #008000; }
.nijz_table_holder table.nijz_table tr td.tema7{ color: #3399cc; }
.nijz_table_holder table.nijz_table tr td.tema8{ color: #99cc33; }
.nijz_table_holder table.nijz_table tr td.tema9{ color: #0099cc; }
.nijz_table_holder table.nijz_table tr td.tema10{ color: #669900; }
.nijz_table_holder table.nijz_table tr td.tema11{ color: #66cc99; }
.nijz_table_holder table.nijz_table tr td.tema12{ color: #FF0000; }
.nijz_table_holder table.nijz_table tr td.tema13{ color: #FF8C00; }
.nijz_table_holder table.nijz_table tr td.tema14{ color: #99cccc; }
</style>';
echo '<div class="spremenljivka nijz_table_holder">';
2021-04-28 11:06:19 +02:00
//echo '<h1 class="nijz_title table_title">Naslov tabele</h1>';
$half = round(count($this->vprasanja_radar) / 2);
echo '<table class="nijz_table">';
for($i=1; $i<=$half; $i++) {
echo '<tr>';
echo '<td class="tema'.$i.'">'.$this->vprasanja_radar[$i]['naslov'].'</td>';
echo '<td class="tema'.$i.'">'.$this->vprasanja_radar[$i]['data'].'</td>';
$j = $i + $half;
echo '<td class="tema'.$j.'">'.$this->vprasanja_radar[$j]['naslov'].'</td>';
echo '<td class="tema'.$j.'">'.$this->vprasanja_radar[$j]['data'].'</td>';
echo '</tr>';
}
echo '</table>';
echo '</div>';
}
// Zgeneriramo pdf analizo
2021-04-28 11:06:19 +02:00
public function createRadar(){
global $site_path;
global $admin_type;
// Najprej pocistimo morebitno obstojeco sliko grafa
$this->deleteRadar();
// Zgeneriramo zacasne csv datoteke
$this->prepareCSV();
$script = $site_path . SCRIPT_FOLDER . '/Nijz.R';
try{
$out = exec('Rscript '.$script.' '.$this->usr_id.' 2>&1', $output, $return_var);
}
catch(Exception $e){
2021-04-28 11:06:19 +02:00
return $e->getMessage();
}
// Testiranje - izpis errorjev
/*if($admin_type == 0){
echo '<div>';
echo 'Rscript '.$script;
//echo '<br />'.$out.'<br />';
var_dump($output);
echo '</div>';
}*/
// Na koncu pobrisemo zacasne datoteke
$this->deleteTemp();
}
// Pripravimo zacasne datoteke
private function prepareCSV(){
global $site_path;
$temp_folder = $site_path . TEMP_FOLDER.'/';
// Ustvarimo CSV
$fd = fopen($temp_folder.'/nijz_'.$this->usr_id.'.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($fd, $convertTypes[$convertType]['BOMchar']);
// Loop po vprasanjih / temah
foreach ($this->vprasanja_radar as $vprasanje) {
if (isset($vprasanje['data']) && (int)$vprasanje['data'] > 0) {
$line = $vprasanje['naslov'].';'.$vprasanje['data'];
fwrite($fd, $line."\r\n");
}
}
fclose($fd);
}
// Pobrisemo zacasne datoteke
private function deleteTemp(){
global $site_path;
$temp_folder = $site_path . TEMP_FOLDER.'/';
// Pobrisemo zacasno CSV datoteko s podatki
if (file_exists($temp_folder.'/nijz_'.$this->usr_id.'.csv')) {
unlink($temp_folder.'/nijz_'.$this->usr_id.'.csv');
}
}
// Pobrisemo sliko grafa
private function deleteRadar(){
global $site_path;
2021-04-26 12:26:32 +02:00
$results_folder = $site_path . RESULTS_FOLDER.'/';
2021-04-26 12:26:32 +02:00
if (file_exists($results_folder.'/radar_'.$this->usr_id.'.png')) {
unlink($results_folder.'/radar_'.$this->usr_id.'.png');
}
}
}