2021-08-23 08:37:03 +02:00
< ? php
/*
* Preverjanje ankete - limiti velikosti , vabil , preverjanmje phishinga ...
*
2021-09-01 10:39:53 +02:00
* Zaenkrat samo preverjamo in posljemo mail adminu
*
2021-08-23 08:37:03 +02:00
*/
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 (){
2021-09-01 10:39:53 +02:00
global $app_limits ;
// Ce limit ni nastavljen ignoriramo
if ( ! isset ( $app_limits [ 'question_count_limit' ]) || $app_limits [ 'question_count_limit' ] <= 0 )
return true ;
2021-08-23 08:37:03 +02:00
// Dobimo stevilo vprasanj v anketi
2021-09-01 10:39:53 +02:00
$stevilo_vprasanj = SurveyInfo :: getInstance () -> getSurveyQuestionCount ();
2021-08-23 08:37:03 +02:00
2021-09-21 12:16:48 +02:00
// Obvestilo (mail adminu) posljemo pri dosezeni stevilki
if ( $stevilo_vprasanj == $app_limits [ 'question_count_limit' ]){
$this -> sendAlert ( $alert_type = 'limit_spremenljivke' , $stevilo_vprasanj );
}
2021-08-23 08:37:03 +02:00
// Ce je v anketi ze vec vprasanj kot je limit
2021-09-01 10:39:53 +02:00
if ( $stevilo_vprasanj > $app_limits [ 'question_count_limit' ]){
2021-08-23 08:37:03 +02:00
return true ;
2021-09-01 10:39:53 +02:00
}
else {
2021-08-23 08:37:03 +02:00
return false ;
2021-09-01 10:39:53 +02:00
}
2021-08-23 08:37:03 +02:00
}
// Preverimo stevilo poslanih vabil
public function checkLimitVabila (){
2021-09-01 10:39:53 +02:00
global $app_limits ;
// Ce limit ni nastavljen ignoriramo
if ( ! isset ( $app_limits [ 'invitation_count_limit' ]) || $app_limits [ 'invitation_count_limit' ] <= 0 )
return true ;
2021-08-23 08:37:03 +02:00
// 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' ];
2021-09-21 12:16:48 +02:00
// Obvestilo (mail adminu) posljemo pri dosezeni stevilki
if ( $stevilo_vabil == $app_limits [ 'invitation_count_limit' ]){
$this -> sendAlert ( $alert_type = 'limit_vabila' , $stevilo_vabil );
}
2021-08-23 08:37:03 +02:00
// Ce je poslanih ze vec vabil kot je limit
2021-09-01 10:39:53 +02:00
if ( $stevilo_vabil > $app_limits [ 'invitation_count_limit' ]){
2021-08-23 08:37:03 +02:00
return true ;
2021-09-01 10:39:53 +02:00
}
else {
2021-08-23 08:37:03 +02:00
return false ;
2021-09-01 10:39:53 +02:00
}
2021-08-23 08:37:03 +02:00
}
2021-09-07 14:42:15 +02:00
// 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 ();
2021-09-21 12:16:48 +02:00
// Obvestilo (mail adminu) posljemo pri dosezeni stevilki
if ( $stevilo_odgovorov == $app_limits [ 'response_count_limit' ]){
$this -> sendAlert ( $alert_type = 'limit_responses' , $stevilo_odgovorov );
}
2021-09-07 14:42:15 +02:00
// Ce je na anketo ze vec responsov kot je limit
if ( $stevilo_odgovorov > $app_limits [ 'response_count_limit' ]){
return true ;
}
else {
return false ;
}
}
2021-08-23 08:37:03 +02:00
// Preverimo ce je anketa potencialno phishing
public function checkPhishing (){
2021-09-01 10:39:53 +02:00
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 ;
}
2021-08-23 08:37:03 +02:00
// 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
2021-09-01 10:39:53 +02:00
if ( $row [ 'count_questions' ] == $stevilo_vprasanj ){
// Posljemo mail adminu
$this -> sendAlert ( $alert_type = 'phishing' );
2021-08-23 08:37:03 +02:00
return true ;
2021-09-01 10:39:53 +02:00
}
else {
2021-08-23 08:37:03 +02:00
return false ;
2021-09-01 10:39:53 +02:00
}
2021-08-23 08:37:03 +02:00
}
2021-09-01 10:39:53 +02:00
// Posljemo obvestilo adminu o prebitem limitu, phishing anketi...
private function sendAlert ( $alert_type , $count = 0 ){
global $site_url ;
2021-09-21 12:16:48 +02:00
global $lastna_instalacija ;
// Alerta ne posljemo na lastnih instalacijah
if ( $lastna_instalacija )
return ;
2021-09-01 10:39:53 +02:00
switch ( $alert_type ){
case 'limit_spremenljivke' :
2021-09-21 12:16:48 +02:00
$title = 'Opozorilo - dosežena omejitev vprašanj' ;
$content = '<a href="' . $site_url . 'admin/survey/index.php?anketa=' . $this -> anketa . '">Anketa ' . $this -> anketa . '</a> ima doseženo omejitev števila vprašanj (' . $count . ')!' ;
2021-09-01 10:39:53 +02:00
break ;
2021-09-07 14:42:15 +02:00
case 'limit_responses' :
2021-09-21 12:16:48 +02:00
$title = 'Opozorilo - dosežena omejitev odgovorov' ;
$content = '<a href="' . $site_url . 'admin/survey/index.php?anketa=' . $this -> anketa . '">Anketa ' . $this -> anketa . '</a> ima doseženo omejitev števila odgovorov (' . $count . ')!' ;
2021-09-07 14:42:15 +02:00
break ;
2021-09-01 10:39:53 +02:00
case 'limit_vabila' :
2021-09-21 12:16:48 +02:00
$title = 'Opozorilo - dosežena omejitev vabil' ;
$content = '<a href="' . $site_url . 'admin/survey/index.php?anketa=' . $this -> anketa . '">Anketa ' . $this -> anketa . '</a> ima doseženo omejitev poslanih vabil (' . $count . ')!' ;
2021-09-01 10:39:53 +02:00
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 ();
}
2021-08-23 08:37:03 +02:00
}
?>