1KA_F2F/admin/survey/classes/class.SurveyCheck.php

194 lines
6.1 KiB
PHP
Raw Normal View History

<?php
/*
* Preverjanje ankete - limiti velikosti, vabil, preverjanmje phishinga...
*
* Zaenkrat samo preverjamo in posljemo mail adminu
*
*/
class SurveyCheck {
var $anketa;
public function __construct($anketa){
if($anketa == null || $anketa <= 0)
return 'ID ankete ne obstaja!';
$this->anketa = $anketa;
}
// Preverimo stevilo vprasanj v anketi
public function checkLimitSpremenljivke(){
global $app_limits;
// Ce limit ni nastavljen ignoriramo
if(!isset($app_limits['question_count_limit']) || $app_limits['question_count_limit'] <= 0)
return true;
// Dobimo stevilo vprasanj v anketi
$stevilo_vprasanj = SurveyInfo::getInstance()->getSurveyQuestionCount();
// Ce je v anketi ze vec vprasanj kot je limit
if($stevilo_vprasanj > $app_limits['question_count_limit']){
// Posljemo mail adminu
$this->sendAlert($alert_type='limit_spremenljivke', $stevilo_vprasanj);
return true;
}
else{
return false;
}
}
// Preverimo stevilo poslanih vabil
public function checkLimitVabila(){
global $app_limits;
// Ce limit ni nastavljen ignoriramo
if(!isset($app_limits['invitation_count_limit']) || $app_limits['invitation_count_limit'] <= 0)
return true;
// Prestejemo poslana vabila
$sql = sisplet_query("SELECT count(id) AS stevilo_vabil
FROM srv_invitations_recipients
WHERE ank_id='".$this->anketa."' AND sent='1'
");
$row = mysqli_fetch_array($sql);
$stevilo_vabil = $row['stevilo_vabil'];
// Ce je poslanih ze vec vabil kot je limit
if($stevilo_vabil > $app_limits['invitation_count_limit']){
// Posljemo mail adminu
$this->sendAlert($alert_type='limit_vabila', $stevilo_vabil);
return true;
}
else{
return false;
}
}
// Preverimo stevilo responsov na anketo
public function checkLimitResponses(){
global $app_limits;
// Ce limit ni nastavljen ignoriramo
if(!isset($app_limits['response_count_limit']) || $app_limits['response_count_limit'] <= 0)
return true;
// Dobimo stevilo odgovorov na anketo
$stevilo_odgovorov = SurveyInfo::getInstance()->getSurveyAnswersCount();
// Ce je na anketo ze vec responsov kot je limit
if($stevilo_odgovorov > $app_limits['response_count_limit']){
// Posljemo mail adminu
$this->sendAlert($alert_type='limit_responses', $stevilo_odgovorov);
return true;
}
else{
return false;
}
}
// Preverimo ce je anketa potencialno phishing
public function checkPhishing(){
global $global_user_id;
// Dobimo stevilo vprasanj v anketi
$stevilo_vprasanj = SurveyInfo::getInstance()->getSurveyQuestionCount();
// Ce imamo v anketi 0 ali vec kot 5 vprasanj je vse ok
if($stevilo_vprasanj >= 5 || $stevilo_vprasanj == 0){
return false;
}
// Dobimo stevilo anket uporabnika
$sqlA = sisplet_query("SELECT count(id) AS count_surveys FROM srv_anketa WHERE insert_uid='".$global_user_id."'");
$rowA = mysqli_fetch_array($sqlA);
// Ce ima uporabnik ze vec anket je vse ok
if($rowA['count_surveys'] > 1){
return false;
}
// Prestejemo vprasanja po tipu
$sql = sisplet_query("SELECT count(s.id) AS count_questions
FROM srv_spremenljivka s, srv_grupa g
WHERE g.ank_id='".$this->anketa."' AND g.id=s.gru_id
AND (tip='21' OR tip='5')
");
$row = mysqli_fetch_array($sql);
// Ce imamo v anketi manj kot 5 vprasanj in so vsa tipa nagovor ali text je potencialen phishing
if($row['count_questions'] == $stevilo_vprasanj){
// Posljemo mail adminu
$this->sendAlert($alert_type='phishing');
return true;
}
else{
return false;
}
}
// Posljemo obvestilo adminu o prebitem limitu, phishing anketi...
private function sendAlert($alert_type, $count=0){
global $site_url;
switch($alert_type){
case 'limit_spremenljivke':
$title = 'Opozorilo - prekoračena omejitev vprašanj';
$content = '<a href="'.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'">Anketa '.$this->anketa.'</a> ima prekoračeno omejitev števila vprašanj ('.$count.')!';
break;
case 'limit_responses':
$title = 'Opozorilo - prekoračena omejitev odgovorov';
$content = '<a href="'.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'">Anketa '.$this->anketa.'</a> ima prekoračeno omejitev števila odgovorov ('.$count.')!';
break;
case 'limit_vabila':
$title = 'Opozorilo - prekoračena omejitev vabil';
$content = '<a href="'.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'">Anketa '.$this->anketa.'</a> ima prekoračeno omejitev poslanih vabil ('.$count.')!';
break;
case 'phishing':
$title = 'Opozorilo - potencialna phishing anketa';
$content = '<a href="'.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'">Anketa '.$this->anketa.'</a> - potencialen phishing!';
break;
}
try{
$MA = new MailAdapter($anketa=null, $type='admin');
$MA->addRecipients('info@1ka.si');
$resultX = $MA->sendMail($content, $title);
}
catch (Exception $e){
}
// Zalogiramo opozorilo
$SL = new SurveyLog();
$SL->addMessage(SurveyLog::ERROR, $title.' - anketa '.$this->anketa);
$SL->write();
}
}
?>