349 lines
9.5 KiB
PHP
349 lines
9.5 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
|
|
|
|
// 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){
|
|
|
|
// 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
|
|
$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;
|
|
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;
|
|
}
|
|
|
|
|
|
// 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');
|
|
}
|
|
}
|
|
|
|
} |