6
define('TYPE_STATUS_KUMULATIVE_6', 'status_kum_6'); # kumulativni statusi 6 brez lurkerjev
# začel izpolnjevat => 5 = 6 + 5 (brez L)
define('TYPE_STATUS_KUMULATIVE_5', 'status_kum_5'); # kumulativni statusi 6 in 5 brez lurkerjev
define('TYPE_STATUS_KUMULATIVE_5ll', 'status_kum_5ll'); # kumulativni statusi 5ll
define('TYPE_STATUS_KUMULATIVE_4ll', 'status_kum_4ll'); # kumulativni statusi 4ll
define('TYPE_STATUS_KUMULATIVE_3ll', 'status_kum_3ll'); # kumulativni statusi 3ll
define('TYPE_STATUS_NULL', 'status_null'); # neustrezni statusi NULL <=> -1
define('TYPE_PAGES', 'pages');
define('TYPE_ANALYSIS', 'analysis');
define('DATE_FORMAT', 'Y-m-d');
define('DATE_FORMAT_SHORT', 'j.n.y');
define('TIME_FORMAT_SHORT', 'G:i');
define('PERIOD_MONTH_PERIOD', 'month_period'); # meseci v obdobju
define('PERIOD_WEEK_PERIOD', 'week_period'); # tedni v obdobju
define('PERIOD_DAY_PERIOD', 'day_period'); # dnevi v mesecu v obdobju(izpis po datumih - dnevi)
define('PERIOD_HOUR_PERIOD', 'hour_period'); # ure v obdobju ( 0 - 23 ) za vsak dan posebej
define('PERIOD_MONTH_YEAR', 'month_year'); # meseci v letu v obdobju (1-12)
define('PERIOD_WEEK_YEAR', 'week_year'); # tedni v letu v obdobju (1-52)
define('PERIOD_DAY_YEAR', 'day_year'); # dnevi v letu v obdobju (1-366)
define('PERIOD_DAY_MONTH', 'day_month'); # dnevi v mesecu v obdobju (1-31)
define('PERIOD_DAY_WEEK', 'day_week'); # dnevi v tednu ( 1 - 7 ) (pon-ned)
define('PERIOD_HOUR_DAY', 'hour_day'); # ure v dnevu ( 0 - 23 )
define('GRAPH_REDUCE', '1.22'); # količnik za koliko zmanjšamo širino grafa da ne prebije
define('REFRESH_USER_COUNT', 1000); # Koliko userejv je meja da delamo refresh na 15 minut
define('REFRESH_USER_TIME', 15); # Na koliko minut delamo update za veliko bazo
class SurveyStatistic {
public $inited=false; // inicializacija
public $surveyId = null; // id ankete
public $doCache = false; // ali keširamo dashboard
public $startDate = null; // datum zacetka statistik
public $endDate = null; // datum konca statistik
public $type = TYPE_STATUS_KUMULATIVE_3ll;
public $period = PERIOD_DAY_PERIOD;
public $periods = array (PERIOD_MONTH_PERIOD,PERIOD_WEEK_PERIOD,PERIOD_DAY_PERIOD,PERIOD_HOUR_PERIOD,PERIOD_MONTH_YEAR,PERIOD_WEEK_YEAR,PERIOD_DAY_YEAR,PERIOD_DAY_MONTH,PERIOD_DAY_WEEK,PERIOD_HOUR_DAY); // možni tipi statistike
public $hideNullValues_dates = true; // ali prikazujemo nicelne vrednosti pri statistiki referalov
public $hideNullValues_status = true; // ali skrivamo nicelne vrednosti pri statisti statusov
public $filter_email_status = 0; // vsi userji
public $timelineDropDownType = 1; // 0 - končni statusi, 1 - kumulativni statusi
public $isDefaultFilters = false; // ali imampo privzete filtre
public $range = null;
public $arrayRange = null; // za datumsko porazdelitev koikov
public $allRecordCount = null; // koliko je vseh zapisov v bazi (neglede na datumsko obdobje)
public $maxValue = 0;
public $isInterval = false; // ali je uporabnik izbral datum iz intervala
public $stat_interval = null; // obdobje intervala
/*
"srv_userstatus_0" => "Email e ni bil poslan",
"srv_userstatus_1" => "Email poslan",
"srv_userstatus_2" => "Napaka pri poiljanju emaila",
"srv_userstatus_3" => "Klik na anketo",
"srv_userstatus_4" => "Klik na prvo stran",
"srv_userstatus_5" => "Začel izpolnjevati",
"srv_userstatus_6" => "Končal anketo",
*/
public $userByStatus = array('valid'=>array(6=>0,5=>0),
'nonvalid'=>array('6l'=>0,'5l'=>0,4=>0,3=>0,-1=>0),
'invitation'=>array(2=>0,1=>0,0=>0)); // za porazdelitev userjev po statusu
public $testDataCount = 0;
public $appropriateStatus = array(6,5); // Statusi anket katere štejemo kot ustrezne
public $unAppropriateStatus = array('6l','5l',4,3,-1); // Statusi anket katere štejemo kot neustrezne, 5l, 6l - lurkerji
public $invitationStatus = array(2,1,0); // Statusi anket katere štejemo kot neustrezne, 5l, 6l - lurkerji
public $emailInvitation = 0; # vsi respondenti (email in normalni)
public $cntUserByStatus = array('valid'=>0, 'nonvalid'=>0, 'invitation'=>0); // Štejemo userej po statusu
public $emailStatus = array(0,1,2); // Statusi povezani z emaili, se upoštevajo v statistiki neglede na datu (timeinsert)
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, 'cntAll'=>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 $realUsersByStatus_base = '3ll'; # kateri status nam predstavlja osnovo (100%) v oknu stopnje odgovorov
public $pageUsersByStatus_base = '3ll'; # kateri status nam predstavlja osnovo (100%) v oknu potek po straneh
public $ip_list = array();
public $db_table = "";
public $fileTimestamp = null; # timestamp ki ga dodelimo datoteki če shranimo dashboard v fajl
public $comments = array(); # za komentarej ankete
public $cnt_all = 0;
public $cnt_email = 0;
/** Inicializacija
*
*/
function Init($sid, $forceDefaultFilter = false) {
global $global_user_id;
# nastavimo sid
$this->surveyId = $sid;
$this->setSurveyId($sid);
Common::deletePreviewData($sid);
# inicializiramo časovne porfile
SurveyTimeProfiles :: Init($this->getSurveyId(), $global_user_id);
# poiščemo aktivno anketo
SurveyInfo :: getInstance()->SurveyInit($this->getSurveyId());
if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1)
$this->db_table = '_active';
# nastavimo spremenljivko ali imamo vse default vrednosti
$this->isDefaultFilters = true;
# resetiramo timestamp
$this->fileTimestamp = null;
# osvezimo datume zacetka in konca iz profila
$this->RefreshDates($forceDefaultFilter);
# če se število respondentov z emaili in brez razlikuje ponudimo filter
$str1 = "SELECT count(*) FROM srv_user WHERE ank_id = '".$this->getSurveyId()."' AND preview = '0' AND deleted='0' AND (time_insert BETWEEN '".$this->startDate."' AND '".$this->endDate."' + INTERVAL 1 DAY)";
list($cnt_all) = mysqli_fetch_row(sisplet_query($str1));
$str2 = "SELECT count(*) FROM srv_user WHERE ank_id = '".$this->getSurveyId()."' AND preview = '0' AND deleted='0' AND inv_res_id is NOT NULL AND (time_insert BETWEEN '".$this->startDate."' AND '".$this->endDate."' + INTERVAL 1 DAY)";
list($cnt_email) = mysqli_fetch_row(sisplet_query($str2));
$this->cnt_all = (int)$cnt_all;
$this->cnt_email = (int)$cnt_email;
# ali gledamo vse/samo emaile/brez emailov
if ( isset($_REQUEST['filter_email_status']) && $_REQUEST['filter_email_status'] != "") {
$this->emailInvitation = (int)$_REQUEST['filter_email_status'];
} else if ( $this->cnt_all == $this->cnt_email && $this->cnt_all > 0 ) {
$this->emailInvitation = 1;
}
# tip statistike, strani, analize, uporabniki
#privzet tip:
$this->type = TYPE_STATUS_KUMULATIVE_3ll;
$this->isDefaultFilters = true;
if ( isset($_REQUEST['type']) && $_REQUEST['type'] != "") {
$this->type = $_REQUEST['type'];
$this->isDefaultFilters = false;
}
# Ali skrivamo vrednosti ki so 0 za datumski prikaz
if ( isset($_REQUEST['hideNullValues_dates']) && $_REQUEST['hideNullValues_dates'] != "") {
$this->hideNullValues_dates = ($_REQUEST['hideNullValues_dates'] == 'true');
$this->isDefaultFilters = false;
}
# Ali skrivamo vrednosti ki so 0 pri statusih
if ( isset($_REQUEST['hideNullValues_status']) && $_REQUEST['hideNullValues_status'] != "") {
$this->hideNullValues_status = ($_REQUEST['hideNullValues_status'] == 'true');
$this->isDefaultFilters = false;
}
# Kateri dropdown prikažemo. ali z končnimi statusi, ali pa z kumulativnmi statusi
if ( isset($_REQUEST['timelineDropDownType']) && $_REQUEST['timelineDropDownType'] == 'false') {
$this->timelineDropDownType = 0;
$this->isDefaultFilters = false;
# če nimamo pravega tipa
} else {
if (!in_array($this->type, array(TYPE_STATUS_KUMULATIVE_3ll, TYPE_STATUS_KUMULATIVE_4ll, TYPE_STATUS_KUMULATIVE_5ll, TYPE_STATUS_KUMULATIVE_5, TYPE_STATUS_KUMULATIVE_6))) {
$this->type = TYPE_STATUS_KUMULATIVE_3ll;
}
}
# Time filter
if ( (int)SurveyTimeProfiles ::getCurentProfileId() !== (int)SurveyTimeProfiles ::getSystemDefaultProfile())
{
$this->isDefaultFilters = false;
}
# obdobje prikaza
if ( isset($_REQUEST['period']) && $_REQUEST['period'] != "") {
$this->period = $_REQUEST['period'];
$this->isDefaultFilters = false;
}
# osnova za stopnje odgovorov (dropdown)
# če smo preklopli na email vabila in če imamo samo vabila je osnova email
if ($this->emailInvitation === 1 && $_REQUEST['inviation_dropdown'] === 'true') {
$this->realUsersByStatus_base = 'email';
} else if ( isset($_REQUEST['userStatusBase']) && $_REQUEST['userStatusBase'] != "") {
if ($this->emailInvitation !== 1 && $_REQUEST['userStatusBase'] == 'email') {
$_REQUEST['userStatusBase'] = '3ll';
}
$this->realUsersByStatus_base = $_REQUEST['userStatusBase'];
$this->isDefaultFilters = false;
}
// Osnova za odgovore po straneh
if (isset($_REQUEST['pageUserStatusBase']) && $_REQUEST['pageUserStatusBase'] != "") {
if ($this->emailInvitation !== 1 && $_REQUEST['pageUserStatusBase'] == 'email') {
$_REQUEST['pageUserStatusBase'] = '3ll';
}
$this->pageUsersByStatus_base = $_REQUEST['pageUserStatusBase'];
$this->isDefaultFilters = false;
}
if ((int)$sid > 0) {
$this->inited = true;
}
}
function ajax() {
global $lang;
}
// GETTERS & SETTERS
function getSurveyId() { return $this->surveyId; }
function setSurveyId($sid) { $this->surveyId = $sid; }
function getStartDate() { return $this->startDate; }
function setStartDate($sd) { $this->startDate = $sd; }
function getEndDate() { return $this->endDate; }
function setEndDate($ed) { $this->endDate = $ed; }
function getUserByStatus() { return $this->userByStatus; }
function getCntUserByStatus() { return $this->cntUserByStatus; }
function setPeriod($period) { $this->period = $period; }
function getArrayRange() { return $this->arrayRange; }//dobi range po datumih
function getUserRedirections() { return $this->userRedirections; }//dobi preusmeritve
function RefreshDates($forceDefaultFilter = false) {
# iz profila preberemo začetni datum in končni datum
$dates = SurveyTimeProfiles :: GetDates($forceDefaultFilter);
$this->startDate = $dates['start_date'];
$this->endDate = $dates['end_date'];
if ($dates['is_default_dates'] == false) {
$this->isDefaultFilters = false;
}
}
/** Pripravi osnovne podatke ce niso podani drugace
*
*/
function PrepareDateView() {
switch ($this->type) {
case TYPE_ALL :
case TYPE_APPROPRIATE :
case TYPE_STATUS_6 :
case TYPE_STATUS_5 :
case TYPE_INAPPROPRIATE :
case TYPE_STATUS_6l :
case TYPE_STATUS_5l :
case TYPE_STATUS_4 :
case TYPE_STATUS_3 :
case TYPE_STATUS_2 :
case TYPE_STATUS_1 :
case TYPE_STATUS_0 :
case TYPE_STATUS_NULL :
#še kumulativni statusi
case TYPE_STATUS_KUMULATIVE_6:
case TYPE_STATUS_KUMULATIVE_5:
case TYPE_STATUS_KUMULATIVE_5ll:
case TYPE_STATUS_KUMULATIVE_4ll:
case TYPE_STATUS_KUMULATIVE_3ll:
$time_edit = 'srv_user.time_insert';
break;
case TYPE_PAGES :
$time_edit = 'grupa.time_edit';
break;
case TYPE_ANALYSIS :
$time_edit = 'srv_tracking'.$this->db_table.'.datetime';
break;
}
switch ($this->period) {
case PERIOD_MONTH_PERIOD :
// vzamemo prvi dan v izbranem mesecu
$intervalFormat = "DATE_FORMAT($time_edit,'%Y-%m') AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = $this->createDateRangeArray($this->startDate, $this->endDate, "Y-m", 'm');
break;
case PERIOD_WEEK_PERIOD :
// vzamemo prvi dan v izbranem mesecu
$intervalFormat = "YEARWEEK($time_edit) AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = $this->createDateRangeArray($this->startDate, $this->endDate, "YW", 'W');
break;
case PERIOD_MONTH_YEAR :
$intervalFormat = "MONTH($time_edit) AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = (($this->startDate <= $this->endDate) ? array_fill(1, 12, 0) : array ());
break;
case PERIOD_WEEK_YEAR :
$intervalFormat = "WEEKOFYEAR($time_edit) AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = (($this->startDate <= $this->endDate) ? array_fill(1, 52, 0) : array ());
break;
case PERIOD_DAY_YEAR :
$intervalFormat = "DAYOFYEAR($time_edit) AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = (($this->startDate <= $this->endDate) ? array_fill(1, 366, 0) : array ());
break;
case PERIOD_DAY_MONTH :
$intervalFormat = "DAYOFMONTH($time_edit) AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = (($this->startDate <= $this->endDate) ? array_fill(1, 31, 0) : array ());
break;
case PERIOD_DAY_PERIOD :
$intervalFormat = "DATE_FORMAT($time_edit,'%Y-%m-%d') AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = $this->createDateRangeArray($this->startDate, $this->endDate, DATE_FORMAT);
break;
case PERIOD_DAY_WEEK :
$intervalFormat = "WEEKDAY($time_edit) AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = (($this->startDate <= $this->endDate) ? array_fill(0, 7, 0) : array ());
break;
case PERIOD_HOUR_DAY :
$intervalFormat = "DATE_FORMAT($time_edit,'%H') AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) // da ne delamo po neporebnem
$this->arrayRange = (($this->startDate <= $this->endDate) ? $this->createDateRangeArray(null,null,null,'H') : array ());
break;
case PERIOD_HOUR_PERIOD :
$intervalFormat = "DATE_FORMAT($time_edit,'%Y-%m-%d %H') AS formatdate ";
$groupBy = "GROUP BY formatdate ";
if (!$this->hideNullValues_dates) {// da ne delamo po neporebnem
// pripravimo data array
//$this->arrayRange = $this->createPeriodDateRangeArray(PERIOD_HOUR_PERIOD, $this->startDate, $this->endDate);
$this->arrayRange = $this->createDateRangeArray($this->startDate, $this->endDate, "Y-m-d H", 'h');
}
break;
}
$email_filter_string = null;
if ($this->emailInvitation > 0) {
if ($this->emailInvitation == 1) {
$email_filter_string = ' AND inv_res_id is not NULL ';
} else if($this->emailInvitation == 2) {
$email_filter_string = ' AND inv_res_id is NULL ';
}
}
// Tega ne rabimo? Drugace je pri kopirani arivski anketi vse prazno
//$intervalLimit = "AND $time_edit BETWEEN '".$this->startDate."' AND '".$this->endDate."' + INTERVAL 1 DAY ";
$intervalLimit = "";
switch ($this->type) {
# VSI
case TYPE_ALL :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' " . $email_filter_string . $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' ".$email_filter_string; // vsi statusi
break;
# USTREZNI BREZ LURKERJEV
case TYPE_APPROPRIATE : # 6,5 brez lurkerjev
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' " . " AND last_status IN (6,5) AND lurker = '0' ".$email_filter_string . $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status IN (6,5) AND lurker = '0' ".$email_filter_string; // samo veljavne statuse
break;
# USTREZNI 6 BREZ LURKERJEV
case TYPE_STATUS_6 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string . $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string;
break;
# USTREZNI 5 BREZ LURKERJEV
case TYPE_STATUS_5 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '5' AND lurker = '0' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '5' AND lurker = '0' ".$email_filter_string;
break;
# NEUSTREZNI
case TYPE_INAPPROPRIATE :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND ( last_status NOT IN (6,5) OR lurker = '1') ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status NOT IN (6,5) OR lurker = '1' ".$email_filter_string;
break;
# NEUSTREZNI 6L lurkerji
case TYPE_STATUS_6l :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '1' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '1' ".$email_filter_string;
break;
# NEUSTREZNI 5L lurkerji
case TYPE_STATUS_5l :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '5' AND lurker = '1' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '1' ".$email_filter_string;
break;
# NEUSTREZNI 4
case TYPE_STATUS_4 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '4' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '4' ".$email_filter_string;
break;
# NEUSTREZNI 3
case TYPE_STATUS_3 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '3' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '3'".$email_filter_string;
break;
# NEUSTREZNI 2
case TYPE_STATUS_2 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '2' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '2'".$email_filter_string;
break;
# NEUSTREZNI 1
case TYPE_STATUS_1 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '1' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '1'".$email_filter_string;
break;
# NEUSTREZNI 0
case TYPE_STATUS_0 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '0' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '0'".$email_filter_string;
break;
# NEUSTREZNI NULL
case TYPE_STATUS_NULL :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '-1' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '-1'.$email_filter_string";
break;
# kumuativni statusi
# KUMULATIVNI 6 BREZ LURKERJEV
case TYPE_STATUS_KUMULATIVE_6 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string;
break;
# KUMULATIVNI 5 = 6 in 5 BREZ LURKERJEV
case TYPE_STATUS_KUMULATIVE_5 :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status IN ('6','5') AND lurker = '0' ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string;
break;
# KUMULATIVNI 5LL = 6 in 5 z lurkerji
case TYPE_STATUS_KUMULATIVE_5ll :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status IN ('6','5') ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string;
break;
# KUMULATIVNI 4LL = 6 in 5 z lurkerji in 4
case TYPE_STATUS_KUMULATIVE_4ll :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status IN ('6','5','4') ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string;
break;
# KUMULATIVNI 3LL = 6 in 5 z lurkerji in 4 in 3
case TYPE_STATUS_KUMULATIVE_3ll :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status IN ('6','5','4','3') ".$email_filter_string. $intervalLimit . $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user WHERE ank_id = '" . $this->getSurveyId() . "' AND preview = '0' AND deleted='0' AND last_status = '6' AND lurker = '0' ".$email_filter_string;
break;
case TYPE_PAGES :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_user_grupa".$this->db_table." AS grupa, srv_grupa WHERE" .
" grupa.gru_id = srv_grupa.id AND srv_grupa.ank_id = '".$this->getSurveyId()."'" . $intervalLimit . " ". $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_user_grupa".$this->db_table." AS grupa, srv_grupa WHERE" .
" grupa.gru_id = srv_grupa.id AND srv_grupa.ank_id = '".$this->getSurveyId()."'";
break;
case TYPE_ANALYSIS :
$sqlString = "SELECT " . $intervalFormat . ", count(*) as cnt FROM srv_tracking".$this->db_table." WHERE" .
" `get` LIKE '%analiza%' AND srv_tracking".$this->db_table.".ank_id = '".$this->getSurveyId()."'" . $intervalLimit . " ". $groupBy;
$sqlStringAll = "SELECT count(*) as cnt FROM srv_tracking".$this->db_table." WHERE" .
" `get` LIKE '%analiza%' AND srv_tracking".$this->db_table.".ank_id = '".$this->getSurveyId()."'";
break;
}
// napolnomo array z damumi med intervali
$sql = sisplet_query($sqlString) ;
while ($row = mysqli_fetch_assoc($sql)) {
$this->range[$row['formatdate']] = $row['cnt'];
}
// preštejemo vse neodvisno od datuma
$sqlAll = sisplet_query($sqlStringAll) ;
$rowAll = mysqli_fetch_assoc($sqlAll);
$this->allRecordCount = $rowAll['cnt'];
if ($this->hideNullValues_dates)
$this->arrayRange = array(); // naredimo prazen array in nato dodamo samo vrednosti > 0
// kjer imamo zapise popravimo pre"stete vrednosti
if ($this->range)
foreach ($this->range as $key => $value) {
$this->arrayRange[$key] = $value;
$this->maxValue = max($this->maxValue, $value);
}
}
/** Funkcija pripravi podatke za vse panele razen za panel DIsplayData
*
*/
function prepareStatusView() {
$email_filter_string = null;
if ($this->emailInvitation > 0) {
if ($this->emailInvitation == 1) {
$email_filter_string = ' AND inv_res_id is not NULL ';
}
else if($this->emailInvitation == 2) {
$email_filter_string = ' AND inv_res_id is NULL ';
}
}
// Tukaj ne vem zakaj filtriramo po datumu? Itak rabimo vse
$qry = sisplet_query("SELECT id, last_status, lurker, testdata, inv_res_id, referer, language
FROM srv_user
WHERE ank_id = '".$this->getSurveyId()."' AND preview='0' AND deleted='0'"
.$email_filter_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 ($this->emailInvitation == 1 && $row['inv_res_id'] != null){
$this->userByStatus['valid']['email'] += 1;
}
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->userRedirections["cntAll"] += 1;
$this->maxRedirection = max($this->maxRedirection , $this->userRedirections["valid"]['email']);
}
# če imamo referal
else if ($row['referer'] != "" && $row['referer'] != "0"){
$parsed = parse_url($row['referer']);
$this->cntValidRedirections += 1;
$this->userRedirections["valid"][$parsed['host']] += 1;
//$this->userRedirections["cntAll"] += 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'];
$_tmp_direct +=1;
$this->cntNonValidRedirections += 1;
}
}
#polovimo jezike
if (isset($this->respondentLangArray[$row['language']])){
$this->respondentLangArray[$row['language']] ++;
}
else{
$this->respondentLangArray[$row['language']] = 1;
}
}
}
# od direktnega klika odštejemo e-mail vabila
if (count($user_id_to_check_link)> 0) {
$qryEmail = sisplet_query("SELECT COUNT(*) as cnt FROM srv_userstatus WHERE usr_id IN (".implode(',', $user_id_to_check_link).") AND status IN (".implode(',', $this->emailStatus).")");
$rwsEmail = mysqli_fetch_assoc($qryEmail);
$this->userRedirections["email"] = (int)$rwsEmail['cnt'];
$directCnt = (int)$_tmp_direct - (int)$rwsEmail['cnt'];
$this->userRedirections["direct"] = $directCnt;
//$this->userRedirections["cntAll"] += $directCnt;
}
// 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);
}
// izracunamo se procente
# v odvisnosti od osnove (dropdown) izberemo kaj nam predstavlja 100%
$status_100_percent = ($this->realUsersByStatus_base == '3ll')
? $this->realUsersByStatus_all
: $this->realUsersByStatus[$this->realUsersByStatus_base]['cnt'];
foreach ($this->realUsersByStatus as $key => $value) {
$this->realUsersByStatus[$key]['percent'] = ($status_100_percent > 0) ? $value['cnt'] / $status_100_percent : 0;
}
# komentarji
$SD = new SurveyDiagnostics($this->surveyId);
$this->comments = $SD->testComments();
}
/** Funkcija klice funkcije za prikaz statistike
* DisplayInfoView - prikaze panelo z osnovnimi informacijami
* DisplayStatusView - prikaze panelo z kliki po statusih
* DisplayReferalsView - prikaze panelo z redirekcijami in referali
* DisplayDataView - prikate panelo z kliki po datumih
*/
function Display() {
global $lang, $site_url;
$dashboardHtml = null;
// Preverjamo ce imamo slucajno izklopljeno shranjevanje datumov odgovorov (potem ni vecine statusov)
$paradata_date = SurveySetting::getInstance()->getSurveyMiscSetting('survey_date');
$dashboardCacheFile = $this->CheckDashbordChacheFile();
// Preverimo stanje datoteke s podatki
$SDF = SurveyDataFile::get_instance();
$SDF->init($this->surveyId);
# iz chace preberemo samo za osnovni profil
if ($this->doCache && $dashboardCacheFile !== null && $this->isDefaultFilters == true ) {
#čas updejta iz dashboarda
$_sql_string = "SELECT DATE_FORMAT(dashboard_update_time,'%d.%m.%Y %H:%i:%s') FROM srv_data_files WHERE sid = '".$this->surveyId."'";
$_sql_qry = sisplet_query($_sql_string);
list($dashboard_update_time) = mysqli_fetch_row($_sql_qry);
echo ''.$lang['srv_dashboard_updated'].$dashboard_update_time.'';
#preberemo podatke o datoteki
echo $SDF->getDataFileInfo();
# preberemo cache file in ga zehamo
echo $this->ReadCacheFile();
}
else {
$dashboard_update_time = date("d.m.Y, H:i:s");
echo ''.$lang['srv_dashboard_updated'].$dashboard_update_time.'';
#preberemo podatke o datoteki
echo $SDF->getDataFileInfo();
// Ce ne zbiramo parapodatkov casov resevanja izpisemo opozorilo
if($paradata_date == 1)
echo '
'.$lang['srv_dashboard_paradata_date_warning'].'';
// Prikazemo filter na datum ce je vklopljen
if (SurveyTimeProfiles::getCurentProfileId() != STP_DEFAULT_PROFILE){
echo '
';
echo '
';
echo ' '."\n";
$this -> DisplayInfoView();
echo ' ';
echo ' | ';
echo '
';
echo ' '."\n";
$this -> DisplayInfoView();
echo ' ';
echo ' | ';
echo '';
echo ' '."\n";
$this -> DisplayStatusView();
echo ' ';
echo ' | ';
echo '';
echo ' '."\n";
$this -> DisplayAnswerStateView();
echo ' ';
echo ' | ';
echo '
';
echo ' ';
$this -> DisplayReferalsView();
echo ' ';
echo ' | ';
echo '';
echo ' ';
echo ''.$lang['srv_statistic_timeline_title'].''.Help :: display('srv_statistic_timeline_title');
$this -> DisplayFilters();
echo ' ';
echo ''; echo ' '."\n";
$this -> DisplayDateView();
echo ' ';
echo ' | ';
echo '';
echo ' ';
$this -> DisplayPagesStateView();
echo ' ';
echo ' | ';
echo '
'; echo $lang['srv_info_name'].':'; echo ' | '; echo htmlentities(SurveyInfo::getSurveyTitle(), ENT_QUOTES, "UTF-8"); echo ' | '; echo '||
'; echo $lang['srv_info_note'].':'; echo ' | '; echo htmlentities($this->limitString(SurveyInfo::getSurveyInfo(),30), ENT_QUOTES, "UTF-8"); echo ' | ||
'; echo $lang['srv_info_type'].':'; echo ' | '; echo $lang['srv_vrsta_survey_type_'.(SurveyInfo::getSurveyType()>2 ? 2 : SurveyInfo::getSurveyType())] . ($enabled_advanced != null ? ' ('.$enabled_advanced.')' : '' ); echo ' | ||
'; echo $lang['srv_info_questions']. ':'; echo ' | '; echo SurveyInfo::getSurveyQuestionCount(); echo ' | '; echo $lang['srv_info_variables']. ':'; echo ' | '; echo SurveyInfo::getSurveyVariableCount(); echo ' |
'; echo $lang['srv_info_pages']. ':'; echo ' | '; echo SurveyInfo::getSurveyGroupCount(); echo ' | ||
'; echo $lang['srv_analiza_stUporabnikov']. ':'; echo ' | '; echo SurveyInfo::getSurveyAnswersCount(); echo ' | '; echo $lang['srv_info_answers_valid']. ':'; echo ' | '; echo SurveyInfo::getSurveyApropriateAnswersCount(); echo ' |
'; echo $lang['srv_info_language']. ':'; echo ' | '; echo SurveyInfo::getRespondentLanguage(); echo ' | ||
'; echo $lang['srv_info_creator']. ':'; echo ' | '; echo SurveyInfo::getSurveyInsertName(); if (SurveyInfo::getSurveyInsertDate() && SurveyInfo::getSurveyInsertDate() != "00.00.0000") echo SurveyInfo::getDateTimeSeperator() . $this->dateFormat(SurveyInfo::getSurveyInsertDate(),DATE_FORMAT_SHORT); if (SurveyInfo::getSurveyInsertTime() && SurveyInfo::getSurveyInsertTime() != "00:00:00") echo SurveyInfo::getDateTimeSeperator() . $this->dateFormat(SurveyInfo::getSurveyInsertTime(),TIME_FORMAT_SHORT); echo ' | ||
'; echo $lang['srv_info_modify']. ':'; echo ' | '; echo SurveyInfo::getSurveyEditName(); if (SurveyInfo::getSurveyEditDate() && SurveyInfo::getSurveyEditDate() != "00.00.0000") echo SurveyInfo::getDateTimeSeperator() . $this->dateFormat(SurveyInfo::getSurveyEditDate(),DATE_FORMAT_SHORT); if (SurveyInfo::getSurveyEditTime() && SurveyInfo::getSurveyEditTime() != "00:00:00") echo SurveyInfo::getDateTimeSeperator() . $this->dateFormat(SurveyInfo::getSurveyEditTime(),TIME_FORMAT_SHORT); echo ' | ||
'; echo $lang['srv_info_access']. ':'; echo ' | '; $prefix=''; foreach ( $dostop as $user) { //echo $prefix.''.iconv("iso-8859-2", "utf-8",$user['name']).''; echo $prefix.''.$user['name'].''; $prefix='; '; } echo ' | ||
'; echo $lang['srv_displaydata_status']. ':'; echo ' | '; if (SurveyInfo::getSurveyColumn('active') == 1) { echo ''.$lang['srv_anketa_active2'].''; } else { # preverimo ali je bila anketa že aktivirana if (!isset($_last_active['starts'])) { # anketa še sploh ni bila aktivirana echo ''.$lang['srv_survey_non_active_notActivated'].''; } else { # anketa je že bila aktivirna ampak je sedaj neaktivna echo ''.$lang['srv_survey_non_active'].''; } } echo ' | ||
'; echo $lang['srv_info_activity']. ':'; echo ' | '; $prefix = ''; foreach ($activity as $active) { $_starts = explode('-',$active['starts']); $_expire = explode('-',$active['expire']); echo $prefix.$_starts[2].'.'.$_starts[1].'.'.$_starts[0].'-'.$_expire[2].'.'.$_expire[1].'.'.$_expire[0]; # echo $prefix . $this->dateFormat($active['starts'],DATE_FORMAT_SHORT).'-'.$this->dateFormat($active['expire'],DATE_FORMAT_SHORT); $prefix = '; '; } echo ' | ||
'; echo $lang['srv_info_duration']. ':'; echo ' | '; echo ($skupni_cas!=''?'':'').$skupni_cas.($skupni_cas!=''?', ':''); echo ''.$lang['srv_predvideno'].': '; if ($d->checkDostopSub('test')) echo ''; echo $skupni_predvideni_cas; if ($d->checkDostopSub('test')) echo ''; echo ' | ||
'; echo $lang['srv_info_first_entry']. ':'; echo ' | '; echo $this->dateFormat($prvi_vnos_date,DATE_FORMAT_SHORT); echo $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($prvi_vnos_time,TIME_FORMAT_SHORT)) : ''; echo ' | '; } if ($zadnji_vnos_date != null) { echo ''; echo $lang['srv_info_last_entry']. ':'; echo ' | '; echo $this->dateFormat($zadnji_vnos_date,DATE_FORMAT_SHORT); echo $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($zadnji_vnos_time,TIME_FORMAT_SHORT)) : ''; echo' |
'; echo $lang['srv_stat_edit'] . ':'; echo ' | '; echo '' . $lang['srv_stat_edit_survey'] . ','; echo ' '.$lang['comments'].''; echo ' | ||
'; echo $lang['srv_diagnostic_4_element_0'] . ':'; echo ' | '; echo $lang['srv_diagnostic_4_element_1']; echo ': '; echo (int)$commentsUnresolved. ' / '.(int)$commentsAll; echo ' | ||
'; echo ' '; echo ' | '; echo $lang['srv_diagnostic_4_element_1a']; echo ': '; echo (int)$commentsUserSurveyUnresolved. ' / '.(int)$commentsUserSurveyAll; echo ' | ||
'; echo ' '; echo ' | '; echo $lang['srv_diagnostic_4_element_6']; echo ': '; echo (int)$commentsQuestionUnresolved. ' / '.(int)$commentsQuestionAll; echo ' | ||
'; echo ' '; echo ' | '; echo $lang['srv_diagnostic_4_element_7']; echo ': '; echo (int)$commentsUserUnresolved. ' / '.(int)$commentsUser; echo ' |
'.$lang['srv_statistic_answer_state_status'].' | '.$lang['srv_statistic_answer_state_frequency'].' | '.$lang['srv_statistic_answer_state_percent'].' |
---|---|---|
'.$lang['srv_userstatus_'.$key].' | '; #frekvenca echo ''.($this->realUsersByStatus[$key]['cnt'] > 0 ? $this->realUsersByStatus[$key]['cnt'] : '0').' | '; #procenti ; echo ''; #echo ( (float)$this->realUsersByStatus[$key]['percent'] > 1.0) echo ( $base_found == false) ? '--' : $this->formatNumber($this->realUsersByStatus[$key]['percent']*100,NUM_DIGIT_PERCENT,'%'); echo ' | '; echo '
'.$lang['srv_statistic_answer_state_usability'].' ('.$sur->bottom_usable_limit.'%/'.$sur->top_usable_limit.'%) | './*$lang['srv_statistic_answer_state_frequency'].*/' | './*$lang['srv_statistic_answer_state_percent'].*/' | |
---|---|---|---|
'.$lang['srv_usableResp_usable_unit'].' | '; echo ''.$usability['usable'].' | '; if($usability['all'] > 0) echo ''.$this->formatNumber($usability['usable']/$usability['all']*100, NUM_DIGIT_PERCENT, '%').' | '; else echo ''.$this->formatNumber(0, NUM_DIGIT_PERCENT, '%').' | '; echo '
'.$lang['srv_usableResp_partusable_unit'].' | '; echo ''.$usability['partusable'].' | '; if($usability['all'] > 0) echo ''.$this->formatNumber($usability['partusable']/$usability['all']*100, NUM_DIGIT_PERCENT, '%').' | '; else echo ''.$this->formatNumber(0, NUM_DIGIT_PERCENT, '%').' | '; echo '
'.$lang['srv_usableResp_unusable_unit'].' | '; echo ''.$usability['unusable'].' | '; if($usability['all'] > 0) echo ''.$this->formatNumber($usability['unusable']/$usability['all']*100, NUM_DIGIT_PERCENT, '%').' | '; else echo ''.$this->formatNumber(0, NUM_DIGIT_PERCENT, '%').' | '; echo '
'.$lang['srv_statistic_answer_state_breakoff'].' | './*$lang['srv_statistic_answer_state_frequency'].*/' | './*$lang['srv_statistic_answer_state_percent'].*/' |
---|---|---|
'.$lang['srv_statistic_answer_state_breakoff_1'].' | '; echo ''.$introBreakoff.' | '; echo ''.$this->formatNumber($introBreakoffPercent*100, NUM_DIGIT_PERCENT, '%').' | '; echo '
'.$lang['srv_statistic_answer_state_breakoff_2'].' | '; echo ''.$qBreakoff.' | '; echo ''.$this->formatNumber($qBreakoffPercent*100, NUM_DIGIT_PERCENT, '%').' (neto '.$this->formatNumber($qBreakoffNeto*100, NUM_DIGIT_PERCENT, '%').') | '; echo '
'.$lang['srv_statistic_answer_state_breakoff_3'].' | '; echo ''.$totalBreakoff.' | '; echo ''.$this->formatNumber($totalBreakoffPercent*100, NUM_DIGIT_PERCENT, '%').' | '; echo '
' . $lang['srv_statistic_redirection_site'] . ' | '."\n"; echo ''.$lang['srv_statistic_redirection_click'].' | '."\n"; echo '
---|---|
' . $lang['srv_statistic_redirection_email'] . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '|
' . $key . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '|
' . $lang['srv_statistic_redirection_direct'] . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '|
' . $lang['srv_statistic_redirection_email'] . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '|
' . $lang['srv_statistic_redirection_sum_clicked'] . ' | '."\n"; echo ''.$value_sum.' | '."\n"; echo '
'."\n"; echo ' | |
' . $lang['srv_statistic_redirection_email_'.$key] . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '|
' . $lang['srv_statistic_redirection_sum_nonvalid'] . ' | '."\n"; echo ''.$value_sum_nonvalid.' | '."\n"; echo '
'."\n"; echo ' | |
' . $lang['srv_statistic_redirection_sum'] . ' | '."\n"; echo ''.($value_sum+$value_sum_nonvalid).' | '."\n"; echo '
'.$lang['srv_count_ip_list'].': '.count($this->ip_list).'
'.$lang['srv_detail_ip_list'].':
'.$lang['srv_statistic_detail'].'
'; */ # skrita div aza podrobnosti echo ''; echo ''; } /** Funkcija za prikaz klikov po straneh * */ function DisplayPagesStateView() { global $lang; # ali lovimo samo strani ki niso bile preskočene $grupa_jump = "AND ug.preskocena = 0 "; echo ''.$lang['srv_statistic_pages_state_title'].''.Help :: display('srv_statistic_pages_state_title'); // Filter po osnovi if ($this->emailInvitation == 1) { $order = array('email','3ll','4ll','5ll',5,6); } else { $order = array('3ll','4ll','5ll',5,6); } echo '' . $lang['srv_statistic_answer_state_status'] . ' | '."\n"; echo ''.$lang['srv_statistic_redirection_click'].' | '."\n"; echo '|
---|---|---|
' . $lang['srv_userstatus_3'] . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '||
' . $lang['srv_userstatus_4'] . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '||
' . $lang['srv_userstatus_5'] . ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '||
' . $lang[''] . ' | '."\n"; echo ''.$lang[' '].' | '."\n"; echo '|
' . $page['naslov'] . ' | '."\n"; echo '' . $lang['srv_stran'].' '.$page['vrstni_red']. ' | '."\n"; $width = ($maxValue && $value) ? (round($value / $maxValue * 100, 0)) : "0"; echo '|
' . $lang[''] . ' | '."\n"; echo ''.$lang[' '].' | '."\n"; echo '|
' . $lang['srv_userstatus_6'] . ' | '."\n"; $width = ($maxValue && $value6) ? (round($value6/ $maxValue * 100, 0)) : "0"; echo '||
' . $lang['srv_userstatus_6l'].'' . ' | '."\n"; $width = ($maxValue && $lurkerjev) ? (round($lurkerjev / $maxValue * 100, 0)) : "0"; echo '||
' . $lang[''] . ' | '."\n"; echo ''.$lang[' '].' | '."\n"; echo '|
' . $lang['srv_userstatus_all'] . ' | '."\n"; $width = ($maxValue && $valueall) ? (round($valueall / $maxValue * 100, 0)) : "0"; echo '
'.$row_userInfo['cnt']. ' | ' .$row_userInfo['referer'].' |
'.$row['ip'].' | '.$row['count'].' |
' . $label . ' | '."\n"; $width = ($this->maxValue && $value) ? (round($value / $this->maxValue * 100, 0)) : "0"; echo '|
' . $lang['srv_statistic_redirection_sum'] . ' | '."\n"; echo ''.$cnt.' | '."\n"; echo ''.$lang['srv_no_data'].' | '."\n";
}
echo '
---|
';
echo ' '."\n";
$this -> DisplayInfoView();
echo ' ';
echo ' | ';
echo '
';
echo ' '."\n";
$this -> DisplayInfoView();
echo ' ';
echo ' | ';
echo '';
echo ' '."\n";
$this -> DisplayStatusView();
echo ' ';
echo ' | ';
echo '';
echo ' '."\n";
$this -> DisplayAnswerStateView();
echo ' ';
echo ' | ';
echo '
';
echo ' ';
$this -> DisplayReferalsView();
echo ' ';
echo ' | ';
echo '';
echo ' ';
echo ''.$lang['srv_statistic_timeline_title'].''.Help :: display('srv_statistic_timeline_title');
echo '';
echo ' ';
echo ''; echo ' '."\n";
$this -> DisplayDateView();
echo ' ';
echo ' | ';
echo '';
echo ' ';
$this -> DisplayPagesStateView();
echo ' ';
echo ' | ';
echo '
';
echo ' '."\n";
{
$lang_array = array();
$lang_array[$lang['id']] = $lang['language'];
$sqll = sisplet_query("SELECT lang_id, language FROM srv_language WHERE ank_id='$this->surveyId' ORDER BY language");
while ($rowl = mysqli_fetch_array($sqll)) {
$lang_array[$rowl['lang_id']] = $rowl['language'];
}
echo ''.$lang['srv_statistic_lang_title'].'';
echo ' ';
echo ''; echo '
| ';
echo '