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

500 lines
15 KiB
PHP

<?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
private $vprasanja_report2 = array(); // array z vsemi vprasanji in odgovori na njih, ki jih obravnavamo (2. porocilo za nijz)
// Barve
private $colors = array(
1 => '9966cc',
2 => 'cc0099',
3 => 'FFD700',
4 => 'cc6699',
5 => 'FFA500',
6 => '008000',
7 => '3399cc',
8 => '99cc33',
9 => '0099cc',
10 => '669900',
11 => '66cc99',
12 => 'FF0000',
13 => 'FF8C00',
14 => '99cccc',
);
function __construct($anketa, $usr_id, $type='1'){
// 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);
$this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString();
}
else{
die();
//return false;
}
// Zakesiramo vprasanja z odgovori v array vprasanja_radar oz. radar2
if($type == '1')
$this->cacheData();
else
$this->cacheDataReport2();
}
// 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'];
}
}
}
// Nastavimo imena vprasanj za 2. pdf porocilo z radarjem
private function cacheDataReport2(){
// 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_report2['radar'][$number]['id'] = $row['id'];
$this->vprasanja_report2['radar'][$number]['variable'] = $row['variable'];
$this->vprasanja_report2['radar'][$number]['naslov'] = $row['label'];
}
ksort($this->vprasanja_report2['radar']);
// Napolnimo odgovore za vse teme
foreach($this->vprasanja_report2['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_report2['radar'][$st_vprasanja]['data'] = $rowData['variable'];
}
}
// Napolnimo if-e
include_once('../../main/survey/app/global_function.php');
new \App\Controllers\SurveyController(true);
save('usr_id', $this->usr_id);
$s = \App\Controllers\CheckController::getInstance();
$sql = sisplet_query("SELECT i.id AS if_id, s.id AS spr_id, s.naslov, i.label
FROM srv_if i, srv_branching b, srv_spremenljivka s
WHERE b.ank_id='".$this->anketa."' AND b.parent=i.id AND s.id=b.element_spr
AND (i.label LIKE 'VARIANTA%'
OR i.label LIKE 'SONCE%'
OR i.label LIKE 'OBLACILA%'
OR i.label LIKE 'KEMIJA%'
OR i.label LIKE 'SOLARIJ%')
");
while($row = mysqli_fetch_array($sql)){
// If ni bil izpolnjen
if(!$s->checkIf($row['if_id']))
continue;
$number = substr($row['label'], -1);
$podrocje = substr($row['label'], 0, -1);
$this->vprasanja_report2['priporocila'][$podrocje] = $row['naslov'];
}
/*echo '<pre>';
print_r($this->vprasanja_report2);
echo '</pre>';*/
}
// Prikazemo radar graf po temah
public function displayRadar(){
global $lang;
global $site_url;
$radar_image = $this->createRadar();
// CSS:)
echo '<style>
.nijz_radar_holder{
text-align: center;
}
.nijz_radar_holder h1.radar_title{
padding-top: 20px;
background-image: none !important;
}
.nijz_radar_holder img{
}
</style>';
echo '<div class="spremenljivka nijz_radar_holder">';
echo '<h1 class="nijz_title radar_title">Ocena bivalnega okolja</h1>';
echo '<img src="'.$radar_image.'">';
echo '</div>';
}
// Prikazemo radar graf po temah v pdf izvozu
public function displayRadarLatex(){
global $lang;
global $site_path;
$this->createRadar();
$tex = '';
$tex .= '\graphicspath{ {'.$site_path.RESULTS_FOLDER.'/} }';
$radar_image = 'radar_'.$this->usr_id.'.png';
//$radar_image = 'radar.png';
// Vstavimo graf
$tex .= '
\begin{center}
\includegraphics[width=15cm]{'.$radar_image.'}
\end{center}
';
return $tex;
}
// Prikazemo tabelo po temah
public function displayTable(){
global $lang;
// CSS:)
echo '<style>';
echo '
.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:nth-child(1),
.nijz_table_holder table.nijz_table tr td:nth-child(3){
width: 280px;
}
';
foreach($this->colors as $key => $color){
echo '.nijz_table_holder table.nijz_table tr td.tema'.$key.'{ color: #'.$color.'; }';
}
echo '</style>';
echo '<div class="spremenljivka nijz_table_holder">';
//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>';
}
// Prikazemo tabelo po temah v pdf izvozu
public function displayTableLatex(){
global $lang;
$half = round(count($this->vprasanja_radar) / 2);
$tex = '';
// Definiramo barve
foreach($this->colors as $key => $color){
$tex .= '\definecolor{tablecolor'.$key.'}{HTML}{'.$color.'}';
}
// Vstavimo tabelo
$tex .= '
\begin{table}[h]
\centering
\begin{tabular}{|>{\raggedright}p{6cm}|c|>{\raggedright}p{6cm}|c|}
';
for($i=1; $i<=$half; $i++) {
$tex .= ' \hline ';
$tex .= '\textcolor{tablecolor'.$i.'}{'.$this->vprasanja_radar[$i]['naslov'].'} & \textcolor{tablecolor'.$i.'}{'.$this->vprasanja_radar[$i]['data'].'} & ';
$j = $i + $half;
$tex .= '\textcolor{tablecolor'.$j.'}{'.$this->vprasanja_radar[$j]['naslov'].'} & \textcolor{tablecolor'.$j.'}{'.$this->vprasanja_radar[$j]['data'].'}';
$tex .= ' \\\\ ';
}
$tex .= '
\hline
\end{tabular}
\end{table}
';
return $tex;
}
// Ustvarimo 2. pdf porocilo
public function createReport2(){
global $site_path;
global $site_url;
global $admin_type;
// Zgeneriramo zacasne csv datoteke
$this->prepareCSVReport2();
$script = $site_path . SCRIPT_FOLDER . '/Nijz2.R';
try{
$out = exec('Rscript '.$script.' '.$this->usr_id.' 2>&1', $output, $return_var);
}
catch(Exception $e){
return $e->getMessage();
}
$pdf_report = $site_url.RESULTS_FOLDER.'/report_'.$this->usr_id.'.pdf';
// 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();
return $pdf_report;
}
// Pripravimo zacasne datoteke za 2. pdf porocilo
private function prepareCSVReport2(){
global $site_path;
// Pobrisemo csv, ce obstaja slucajno star
$this->deleteTemp();
$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 radar podatkih
foreach ($this->vprasanja_report2['radar'] as $radar_number => $radar) {
if (isset($radar['data']) && (int)$radar['data'] > 0) {
$line = $radar['naslov'].';'.$radar['data'].';';
fwrite($fd, $line."\r\n");
}
}
// Loop po podrocjih in textih
foreach ($this->vprasanja_report2['priporocila'] as $podrocje => $podrocje_text) {
$podrocje_text = strip_tags($podrocje_text, '<br><strong>');
$podrocje_text = trim($podrocje_text);
$podrocje_text = preg_replace('/\s+/', ' ',$podrocje_text);
$line = $podrocje.';'.$podrocje_text.';';
fwrite($fd, $line."\r\n");
}
fclose($fd);
}
// Zgeneriramo pdf analizo
public function createRadar(){
global $site_path;
global $site_url;
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){
return $e->getMessage();
}
$radar_image = $site_url.RESULTS_FOLDER.'/radar_'.$this->usr_id.'.png';
// 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();
return $radar_image;
}
// 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;
$results_folder = $site_path . RESULTS_FOLDER.'/';
if (file_exists($results_folder.'/radar_'.$this->usr_id.'.png')) {
unlink($results_folder.'/radar_'.$this->usr_id.'.png');
}
}
}