0, 'nonvalid'=>0, 'invitation'=>0);
public $cntUserByStatus = array();
public $appropriateStatus = array(6,5);
public $unAppropriateStatus = array('6l','5l',4,3);
public $invitationStatus = array(2,1,0);
public $testDataCount = 0;
public $cntValidRedirections = 0; // Stejemo vlejavne referale (ki vsebujejo tekst)
public $cntNonValidRedirections = 0; // Stejemo neveljavne referale (ki ne vsebujejo teksta)
public $userRedirections = array(3=>0,4=>0,5=>0,6=>0,'valid' => array('email'=>0),'email'=>0,'direct'=>0); // za porazdelitev redirekcij na anketo
public $maxRedirection = 0; // koliko je maksimalno število klikov (za primerno širino diva)
public $maxCharRedirection = 0; // max stevilo znakovv v "host" (za lepsi izpis redirekcij)
public $realUsersByStatus_all = 0; // skupaj frekvenc
public $realUsersByStatus = array(); // frekvenca po posameznem statusu (uposeteva da ce je kdo koncal anketo jo je tudi zacel)
public $respondentLangArray = array(); # grupiranje po jezikih
public $tmp_direct = 0;
public $emailStatus = array(0,1,2);
function __construct($cntAnswers,$answers,$surveyId) {
global $lang;
$this->cntUserByStatus = $cntAnswers;
$this->userByStatus = $answers;
$this->_surveyId = $surveyId;
//$this->izracunajPodatke($this->_surveyId);
//error_log("ID: ".$surveyId);
$sur = new SurveyUsableResp($surveyId, $generateDatafile=false);
if(!$sur->hasDataFile())
echo $lang['srv_dashboard_no_file']; // Ce se ni zgenerirana datoteka s podatki izpisemo error
else
$this->usability = $sur->calculateData(); // Dobimo array z usability podatki
//var_dump($this->usability);
$page = $_GET['m'];
if(strcmp($page,'aapor2') == 0)
$this->calculateFullAapor();
else if(strcmp($page,'aapor1') == 0)
$this->calculateAapor();
}
function calculateAapor() {
global $lang;
$s6 = (int)$this->userByStatus['valid'][6];
$s5 = (int)$this->userByStatus['valid'][5];
$s6l = (int)$this->userByStatus['nonvalid']['6l'];
$s5l = (int)$this->userByStatus['nonvalid']['5l'];
$s4 = (int)$this->userByStatus['nonvalid'][4];
$s3 = (int)$this->userByStatus['nonvalid'][3];
$s2 = (int)$this->userByStatus['nonvalid'][2];
$s1 = (int)$this->userByStatus['nonvalid'][1];
$s0 = (int)$this->userByStatus['nonvalid'][0];
$s_1 = (int)$this->userByStatus['nonvalid'][-1];
/* debug
echo '
'.$s6;
echo '
'.$s5;
echo '
'.$s6l;
echo '
'.$s5l;
echo '
'.$s4;
echo '
'.$s3;
echo '
'.$s2;
echo '
'.$s1;
echo '
'.$s0;
echo '
'.$s_1;
*/
/* Po starem še
* $rr1 = @$s6 / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1)+($s2+$s0));
$rr2 = @($s6+$s5) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1)+($s2+$s0));
$rr3 = @$s6 / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1)+0.5*($s2+$s0));
$rr4 = @($s6+$s5) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1)+0.5*($s2+$s0));
$rr5 = @$s6 / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1));
$rr6 = @($s6+$s5) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1));
$con1 = @($s6+$s5+$s6l+$s5l+$s4+$s3) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1)+($s2+$s0));
$con2 = @($s6+$s5+$s6l+$s5l+$s4+$s3) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1)+0.5*($s2+$s0));
$con3 = @($s6+$s5+$s6l+$s5l+$s4+$s3) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1));
$pror = @($s6+$s5) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1));
$comr = @($s6+$s5) / ( ($s6+$s5)+($s6l+$s5l+$s4+$s3+$s1));
pregledovanje
$crr = $pror * $comr;
*/
//$this->izracunajPodatke($this->_surveyId);
$usable = $this->usability['usable'];
$partusable = $this->usability['partusable'];
$all = $this->usability['all'];
$niodgo = (int)$this->_answwers['invitation'][1];
$rr1_apro = 0;
$rr2_apro = 0;
$rr5_apro = 0;
$rr6_apro = 0;
if($all > 0){
$rr1_apro = $this->formatNumber(($usable)/$all,3,'');
//$rr5_apro = $this->formatNumber(($usable)/($all-$niodgo),3,'');
$rr2_apro = $this->formatNumber(($usable+$partusable)/$all,3,'');
//$rr6_apro = $this->formatNumber(($usable+$partusable)/($all-$niodgo),3,'');
}
echo '
';
//echo 'Uporabni: '.$usability['usable'].'
Delno uporabni: '.$usability['partusable'].'
Vsi:'.$usability['all'].'
';
echo ''.$lang['srv_aapor_show_approximate_calculation'].'
';
echo '
';
echo '
';
//echo '
';
//echo '
';
echo '
';
/*echo 'AAPOR response rate glede na 1KA statuse:';
echo '
RR1 = '.$this->formatNumber($rr1,3,'');
echo '
RR2 = '.$this->formatNumber($rr2,3,'');
echo '
RR3 = '.$this->formatNumber($rr3,3,'').'';
echo '
RR4 = '.$this->formatNumber($rr4,3,'');
echo '
RR5 = '.$this->formatNumber($rr5,3,'');
echo '
RR6 = '.$this->formatNumber($rr6,3,'');
echo '
';
echo '
Contact rates:';
echo '
CON1 = '.$this->formatNumber($con1,3,'');
echo '
CON2 = '.$this->formatNumber($con2,3,'');
echo '
CON3 = '.$this->formatNumber($con3,3,'');
echo '
';
echo '
AAPOR paneli:';
echo '
Profile rate: PROR = '.$this->formatNumber($pror,3,'');
echo '
Completion rate: COMR = '.$this->formatNumber($comr,3,'');
echo '
';
echo '
Cumulative response rate:';
echo '
CUMRR = '.$this->formatNumber($crr,3,'');*/
//echo '';
echo '';
echo '
';
}
function calculateFullAapor(){
global $lang;
echo '';
echo '
'.$lang['srv_lnk_AAPOR2'].'
';
echo'
';
echo '
';
echo '';
echo '
'.$lang['srv_aapor_show_calculation'].'
';
echo '
RR1: | |
RR2: | |
RR3: | |
RR4: | |
RR5: | |
RR6: | |
';
echo '
';;
}
function calculationForFullAapor(){
$data = array();
$rr1 = 0;
$rr2 = 0;
$rr3 = 0;
$rr4 = 0;
$rr5 = 0;
$rr6 = 0;
$refusal = $_POST['refusal'];
$refusal = $refusal=='' || !is_numeric($refusal) ? 0:$refusal;
$breakOff = $_POST['breakOff'];
$breakOff = $breakOff=='' || !is_numeric($breakOff) ? 0:$breakOff;
$invitationReturnedUndelivered = $_POST['invitationReturnedUndelivered'];
$invitationReturnedUndelivered = $invitationReturnedUndelivered=='' || !is_numeric($invitationReturnedUndelivered) ? 0:$invitationReturnedUndelivered;
$invitationReturnedForwarding = $_POST['invitationReturnedForwarding'];
$invitationReturnedForwarding = $invitationReturnedForwarding=='' || !is_numeric($invitationReturnedForwarding) ? 0:$invitationReturnedForwarding;
$otherUnknownEligible = $_POST['otherUnknownEligible'];
$otherUnknownEligible = $otherUnknownEligible=='' || !is_numeric($otherUnknownEligible) ? 0:$otherUnknownEligible;
$i = $_POST['complete'];
$i = $i=='' || !is_numeric($i) ? 0:$i;
$p = $_POST['partial'];
$p = $p=='' || !is_numeric($p) ? 0:$p;
$r = $refusal+$breakOff;
$nc = $_POST['nonContact'];
$nc = $nc=='' || !is_numeric($nc) ? 0:$nc;
$o = $_POST['otherEligible'];
$o = $o == '' || !is_numeric($o) ? 0:$o;
$uh = $_POST['nothingKnown'];
$uh = $uh=='' || !is_numeric($uh) ? 0:$uh;
$uo = $invitationReturnedUndelivered + $invitationReturnedForwarding + $otherUnknownEligible;
$e = $_POST['e'];
$e = $e=='' || !is_numeric($e) ? 100:$e;
if($e > 100 || $e<0){
$e = 100;
}
$e = $e/100;
//error_log("E je ".$e);
$sub1 = $i+$p+$r+$nc+$o+$uh+$uo;
$sub2 = $i+$p+$r+$nc+$o+$e*($uh+$uo);
$sub3 = $i+$p+$r+$nc+$o;
//error_log($refusal." - ".$breakOff." - ".$invitationReturnedUndelivered." - ".$invitationReturnedForwarding." - ".$otherUnknownEligible." - ".$i."- ".$p." - ".$r." - ".$nc." - ".$o." - ".$uh." - ".$uo." - ".$e);
if($sub1 > 0){
$rr1 = $i/($sub1);
$rr2 = ($i+$p)/($sub1);
}
if($sub2 > 0){
$rr3 = $i/($sub2);
$rr4 = ($i+$p)/($sub2);
}
if($sub3 > 0){
$rr5 = $i/($sub3);
$rr6 = ($i+$p)/($sub3);
}
$data['rr1'] = $this->formatNumber($rr1,3,'');
$data['rr2'] = $this->formatNumber($rr2,3,'');
$data['rr3'] = $this->formatNumber($rr3,3,'');
$data['rr4'] = $this->formatNumber($rr4,3,'');
$data['rr5'] = $this->formatNumber($rr5,3,'');
$data['rr6'] = $this->formatNumber($rr6,3,'');
echo json_encode($data);
}
function izracunajPodatke($id){
/*$sur = new SurveyUsableResp($id, $generateDatafile=false);
if($sur->hasDataFile())
$this->usability = $sur->calculateData(); // Dobimo array z usability podatki*/
$qry_string = "SELECT id, language, last_status, lurker, inv_res_id, referer FROM srv_user WHERE ank_id = '".$id."' AND preview = '0' AND deleted='0'";
$qry = sisplet_query($qry_string);
if (mysqli_num_rows($qry) > 0) {
$user_id_to_check_link = array(); # id-ji uporabnikov pri katerih imamo direkten klik. naknadno ugotavljamo ali je slučajno e-mail vabilo
while ($row = mysqli_fetch_assoc($qry)) {
if ((int)$row['testdata'] > 0) {
$this->testDataCount++;
}
// dodamo statuse
if (in_array($row['last_status'], $this->appropriateStatus))
{
# če ni lurker je ok
if ($row['lurker'] == 0)
{
$this->userByStatus['valid'][$row['last_status']] += 1;
$this->cntUserByStatus['valid'] += 1;
}
else
{
# če je lurker ga dodamo k neveljavnim
$this->userByStatus['nonvalid'][$row['last_status'].'l'] += 1;
$this->cntUserByStatus['nonvalid'] += 1;
}
}
# neveljavne enote
else if (in_array($row['last_status'], $this->unAppropriateStatus))
{
$this->userByStatus['nonvalid'][$row['last_status']] += 1;
$this->cntUserByStatus['nonvalid'] += 1;
}
# emaili
else if (in_array($row['last_status'], $this->invitationStatus))
{
$this->userByStatus['invitation'][$row['last_status']] += 1;
$this->cntUserByStatus['invitation'] += 1;
}
#polovimo redirekte
if (in_array((int)$row['last_status'], $this->invitationStatus))
{
# email vabila ... ne lovimo redirektov
# podatek o referalu je prazen lahko da email ni bil poslan, ali pa gre za direkten link
#$this->cntNonValidRedirections += 1;
#$this->userRedirections[(int)$row['last_status']] += 1;
}
else {
# če so vabila
if ($row['inv_res_id'] != null )
{
$this->cntValidRedirections += 1;
$this->userRedirections["valid"]['email'] += 1;
$this->maxRedirection = max($this->maxRedirection , $this->userRedirections["valid"]['email']);
}
# če imamo referal
else if ($row['referer'] != "")
{
$parsed = parse_url($row['referer']);
$this->cntValidRedirections += 1;
$this->userRedirections["valid"][$parsed['host']] += 1;
$this->maxCharRedirection = max($this->maxCharRedirection , strlen ($parsed['host']) );
$this->maxRedirection = max($this->maxRedirection , $this->userRedirections["valid"][$parsed['host']] );
}
# če ne je najbrž direkten link
else
{
# shranimo id_userjev za katere nato ugotavljamo ali je link res direkten ali obstaja kaksen zapis da je slo preko e-maila
$user_id_to_check_link[] = $row['id'];
$this->tmp_direct +=1;
}
}
#polovimo jezike
if (isset($respondentLangArray[$row['language']]))
{
$respondentLangArray[$row['language']] ++;
}
else
{
$respondentLangArray[$row['language']] = 1;
}
}
}
# od direktnega klika odštejemo e-mail vabila
if (count($user_id_to_check_link)> 0) {
$qry_stringEmail = "SELECT COUNT(*) as cnt FROM srv_userstatus WHERE usr_id IN (".implode($user_id_to_check_link,',').") AND status IN (".implode($this->emailStatus,',').")";
$qryEmail = sisplet_query($qry_stringEmail);
$rwsEmail = mysqli_fetch_assoc($qryEmail);
$this->userRedirections["email"] = (int)$rwsEmail['cnt'];
$this->userRedirections["direct"] = (int)$this->tmp_direct - (int)$rwsEmail['cnt'];
}
// prestejemo max stevilo klikov za lepsi izris tabele
$this->maxRedirection = max($this->maxRedirection , $this->userRedirections["2"], $this->userRedirections["1"], $this->userRedirections["0"],$this->userRedirections["direct"], $this->userRedirections['email']);
# izracunamo realne frekvence po statusih
# Klik na anketo - vsak ki je končal anketo (itd...) je "najbrž" tudi kliknil na anketo..
$this->realUsersByStatus_all = $this->userByStatus['valid'][6]
+ $this->userByStatus['valid'][5]
+ $this->userByStatus['nonvalid']['5l']
+ $this->userByStatus['nonvalid']['6l']
+ $this->userByStatus['nonvalid'][4]
+ $this->userByStatus['nonvalid'][3]
+ $this->userByStatus['nonvalid'][-1];
// Klik na prvo stran - vsak ki je končal anketo (itd...) je "najbrž" tudi kliknil na anketo..
# končal anketo => 6
$this->realUsersByStatus[6] = array('cnt'=>$this->userByStatus['valid'][6], 'percent'=>0);
# začel izpolnjevat => 5 = 6 + 5
$this->realUsersByStatus[5] = array('cnt'=>$this->userByStatus['valid'][5]+$this->realUsersByStatus[6]['cnt'], 'percent'=>0);
# Koliko ljudi je dejansko končalo anketo ne glede na to ali so lurkerji 6 + 6l
$this->realUsersByStatus['6ll'] = array('cnt'=>$this->userByStatus['nonvalid']['6l']+$this->realUsersByStatus[6]['cnt'], 'percent'=>0);
# delno izpolnjena 4ll => 6 + 5 + 6l + 5l
$this->realUsersByStatus['5ll'] = array('cnt'=>$this->userByStatus['nonvalid']['6l']+$this->userByStatus['nonvalid']['5l']+$this->realUsersByStatus[5]['cnt'], 'percent'=>0);
# klik na prvo stran => 4 = 6 + 6l + 5l + 5 + 4
$this->realUsersByStatus['4ll'] = array('cnt'=>$this->userByStatus['nonvalid'][4]+$this->realUsersByStatus['5ll']['cnt'], 'percent'=>0);
# klik na anketo => 3 = 6 + 6l + 5l + 5 + 4 + 3
$this->realUsersByStatus['3ll'] = array('cnt'=>$this->userByStatus['nonvalid'][3]+$this->userByStatus['nonvalid'][-1]+$this->realUsersByStatus['4ll']['cnt'], 'percent'=>0);
//if ($this->emailInvitation == 1)
{
$this->realUsersByStatus['email']
= array('cnt'=>(isset($this->userByStatus['valid']['email'])?$this->userByStatus['valid']['email']:0), 'percent'=>0);
}
$qry_string = "SELECT * FROM srv_invitations_recipients WHERE ank_id='".$id."' AND deleted='0'";
$qry = sisplet_query($qry_string);
$this->userByStatus['invitation'][0]=0;
$this->userByStatus['invitation'][1]=0;
$this->userByStatus['invitation'][2]=0;
while ($row = mysqli_fetch_assoc($qry)) {
if(in_array($row['last_status'], $this->invitationStatus)){
$this->userByStatus['invitation'][$row['last_status']] += 1;
}
}
}
function prikaziPriblizek(){
$data = array();
error_log("Id v metodi priblizek: ".$this->_surveyId);
/*$ss = new SurveyStatistic();
$ss->Init($this->_surveyId);
$ss->PrepareDateView();
$this->userByStatus = $ss->getUserByStatus();*/
//$this->izracunajPodatke($id);
//var_dump($this->cntUserByStatus);
$usable = $this->usability['usable'];
$partusable = $this->usability['partusable'];
$unusable = $this->usability['unusable'];
$status3 = $this->userByStatus['nonvalid'][3];
$status4 = $this->userByStatus['nonvalid'][4];
$status34 = 0;
$status0 = $this->userByStatus['invitation'][0];
$status2 = $this->userByStatus['invitation'][2];
$status02 = 0;
$status1 = $this->userByStatus['invitation'][1];
//if(!is_null($status3) && !is_null($status4) && is_int($status3) && is_int($status4)){
$status34 = $status3+$status4;
//}
//if(!is_null($status0) && !is_null($status2) && is_int($status0) && is_int($status2)){
$status02 = $status0+$status2;
//}
$skupaj = $this->cntUserByStatus['valid']+$this->cntUserByStatus['nonvalid']+$this->cntUserByStatus['invitation'];
$data['usable'] = is_null($usable) || !is_int($usable) ? 0 : $usable;
$data['partusable'] = is_null($partusable) || !is_int($partusable) ? 0 : $partusable;
$data['unusable'] = is_null($unusable) || !is_int($unusable) ? 0 : $unusable;
$data['status1'] = is_null($status1) || !is_int($status1) ? 0 : $status1;
$data['status34'] = $status34;
$data['status02'] = $status02;
$data['skupaj'] = $skupaj;
echo json_encode($data);
}
/** Lepo oblikuje number string
*
* @param float $value
* @param int $digit
* @param string $sufix
* @return string
*/
function formatNumber ($value, $digit = 0, $sufix = "") {
if ($value <> 0 && $value != null)
$result = round($value, $digit);
else
$result = "0";
$result = number_format($result, $digit, '.', ',') . $sufix;
return $result;
}
}