<?php
global $site_path;
include_once('../../function.php');
include_once('../survey/definition.php');
include_once('../exportclases/class.xls.php');
/** Class za generacijo xls-ja
*
*/
class XlsIzvozAnalizaMean {
var $anketa; // trenutna anketa
private $headFileName = null; // pot do header fajla
private $dataFileName = null; // pot do data fajla
private $dataFileStatus = null; // status data datoteke
public $meansClass = null; //means class
var $meanData1;
var $meanData2;
var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
/**
* @desc konstruktor
*/
function __construct ($anketa = null, $podstran = 'mean'){
global $site_path;
global $global_user_id;
global $output;
// preverimo ali imamo stevilko ankete
if ( is_numeric($anketa) ){
$this->anketa['id'] = $anketa;
SurveyAnalysis::Init($this->anketa['id']);
SurveyAnalysis::$setUpJSAnaliza = false;
// create new XLS document
$this->xls = new xls();
// Poskrbimo za datoteko s podatki
$SDF = SurveyDataFile::get_instance();
$SDF->init($this->anketa['id']);
$SDF->prepareFiles();
$this->headFileName = $SDF->getHeaderFileName();
$this->dataFileName = $SDF->getDataFileName();
$this->dataFileStatus = $SDF->getStatus();
$_GET['a'] = A_ANALYSIS;
// preberemo nastavitve iz baze (prej v sessionu)
SurveyUserSession::Init($this->anketa['id']);
$this->sessionData = SurveyUserSession::getData('means');
// ustvarimo means objekt
$this->meansClass = new SurveyMeans($anketa);
if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
$this->anketa['uid'] = $global_user_id;
SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
}
else
return false;
return true;
}
else{
return false;
}
}
// SETTERS && GETTERS
function getFile($fileName)
{
//Close and output rtf document
$output = $this->createXls();
$this->xls->display($fileName, $output);
}
function init()
{
return true;
}
function encodeText($text)
{ // popravimo sumnike ce je potrebno
$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
$text = str_replace(array("š","š","č"),array("š","š","č"),$text);
return strip_tags($text);
}
function createXls()
{
global $site_path;
global $lang;
global $output;
$convertTypes = array('charSet' => "windows-1250",
'delimit' => ";",
'newLine' => "\n",
'BOMchar' => "\xEF\xBB\xBF");
$output = $convertTypes['BOMchar'];
$output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_means'].' - '.SurveyInfo::getSurveyTitle().'</b></font></td></tr></table>';
$means = array();
# če ne uporabljamo privzetega časovnega profila izpišemo opozorilo
//$doNewLine = SurveyTimeProfiles :: printIsDefaultProfile(false);
# če imamo filter ifov ga izpišemo
//$doNewLine = SurveyConditionProfiles:: getConditionString($doNewLine );
# če imamo filter spremenljivk ga izpišemo
//$doNewLine = SurveyVariablesProfiles:: getProfileString($doNewLine , true) || $doNewLine;
$this->meanData1 = $this->sessionData['means_variables']['variabla1'];
$this->meanData2 = $this->sessionData['means_variables']['variabla2'];
if ($this->meanData1 !== null && $this->meanData2 !== null) {
$variables1 = $this->meanData2;
$variables2 = $this->meanData1;
$c1=0;
$c2=0;
if (is_array($variables2) && count($variables2) > 0) {
foreach ($variables2 AS $v_second) {
if (is_array($variables1) && count($variables1) > 0) {
foreach ($variables1 AS $v_first) {
$_means = $this->meansClass->createMeans($v_first, $v_second);
if ($_means != null) {
$means[$c1][$c2] = $_means;
}
$c2++;
}
}
$c1++;
$c2=0;
}
}
if (is_array($means) && count($means) > 0) {
foreach ($means AS $mean_sub_grup) {
$output .= '<table border="0"><tr><td></td></tr></table>';
$this->displayMeansTable($mean_sub_grup);
}
}
}
return $output;
}
public function displayMeansTable($_means) {
global $lang;
global $output;
#število vratic in število kolon
$cols = count($_means);
# preberemo kr iz prvega loopa
$rows = count($_means[0]['options']);
# ali prikazujemo vrednosti variable pri spremenljivkah
$show_variables_values = $this->meansClass->doValues;
# izrišemo tabelo
$output .= '<table border="1">';
$output .= '<tr>';
$label2 = $this->meansClass->getSpremenljivkaTitle($_means[0]['v2']);
$label2 = $this->encodeText($label2);
$output .= '<td align="center" rowspan="2">';
$output .= '<b>'.$label2.'</b>';
$output .= '</td>';
for ($i = 0; $i < $cols; $i++) {
$output .= '<td align="center" colspan="2" >';
$label1 = $this->meansClass->getSpremenljivkaTitle($_means[$i]['v1']);
$label1 = $this->encodeText($label1);
$output .= '<b>'.$label1.'</b>';
$output .= '</td>';
}
$output .= '</tr>';
$output .= '<tr>';
for ($i = 0; $i < $cols; $i++) {
#Povprečje
$output .= '<td align="center">';
$output .= $lang['srv_means_label'];
$output .= '</td>';
#odstotki
$output .= '<td align="center">'.$lang['srv_means_label4'].'</td>';
}
$output .= '</tr>';
if (count($_means[0]['options']) > 0) {
foreach ($_means[0]['options'] as $ckey2 =>$crossVariabla2) {
$output .= '<tr>';
$output .= '<td align="center">';
$output .= $crossVariabla2['naslov'];
# če ni tekstovni odgovor dodamo key
if ($crossVariabla2['type'] !== 't' ) {
if ($show_variables_values == true) {
if ($crossVariabla2['vr_id'] == null) {
$output .= ' ( '.$ckey2.' )';
} else {
$output .= ' ( '.$crossVariabla2['vr_id'].' )';
}
}
}
$output .= '</td>';
# celice z vsebino
for ($i = 0; $i < $cols; $i++) {
$output .= '<td align="center" k1="'.$ckey1.'" k2="'.$ckey2.'" n1="'.$crossVariabla1['naslov'].'" n2="'.$crossVariabla2['naslov'].'" v1="'.$crossVariabla1['vr_id'].'" v2="'.$crossVariabla2['vr_id'].'">';
$output .= $this->meansClass->formatNumber($_means[$i]['result'][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'));
$output .= '</td>';
$output .= '<td align="center">';
$output .= (int)$_means[$i]['sumaVrstica'][$ckey2];
$output .= '</td>';
}
$output .= '</tr>';
}
}
$output .= '<tr>';
$output .= '<td align="center">'.$lang['srv_means_label3'].'</td>';
for ($i = 0; $i < $cols; $i++) {
$output .= '<td align="center">';
$output .= $this->meansClass->formatNumber($_means[$i]['sumaMeans'], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'));
$output .= '</td>';
$output .= '<td align="center">';
$output .= (int)$_means[$i]['sumaSkupna'];
$output .= '</td>';
}
$output .= '</tr>';
$output .= '</table>';
}
/*Skrajsa tekst in doda '...' na koncu*/
function snippet($text,$length=64,$tail="...")
{
$text = trim($text);
$txtl = strlen($text);
if($txtl > $length)
{
for($i=1;$text[$length-$i]!=" ";$i++)
{
if($i == $length)
{
return substr($text,0,$length) . $tail;
}
}
$text = substr($text,0,$length-$i+1) . $tail;
}
return $text;
}
function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
function formatNumber($value,$digit=0,$sufix="")
{
if ( $value <> 0 && $value != null )
$result = round($value,$digit);
else
$result = "0";
//$result = number_format($result, $digit, ',', '.').$sufix;
$result = number_format($result, $digit, ',', '') . $sufix;
// Preprecimo da bi se stevilo z decimalko pretvorilo v datum
//$result = '="'. $result.'"';
return $result;
}
}
?>