Dosežena omejitev strežnika
'; echo 'Prosimo, počakajte nekaj trenutkov. Trenutno je doseženo maksimalno število vnosov ankete na minuto.
'; echo ''; echo '
anketa = $anketa;
}
// Preverimo stevilo vprasanj v anketi
public function checkLimitSpremenljivke(){
// Ce limit ni nastavljen ignoriramo
if(!AppSettings::getInstance()->getSetting('app_limits-question_count_limit'))
return true;
// Dobimo stevilo vprasanj v anketi
$stevilo_vprasanj = SurveyInfo::getInstance()->getSurveyQuestionCount();
// Obvestilo (mail adminu) posljemo pri dosezeni stevilki
if($stevilo_vprasanj == AppSettings::getInstance()->getSetting('app_limits-question_count_limit')){
$this->sendAlert($alert_type='limit_spremenljivke', $stevilo_vprasanj);
}
// Ce je v anketi ze vec vprasanj kot je limit
if($stevilo_vprasanj > AppSettings::getInstance()->getSetting('app_limits-question_count_limit')){
return true;
}
else{
return false;
}
}
// Preverimo stevilo poslanih vabil
public function checkLimitVabila(){
// Ce limit ni nastavljen ignoriramo
if(!AppSettings::getInstance()->getSetting('app_limits-invitation_count_limit'))
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'];
// Obvestilo (mail adminu) posljemo pri dosezeni stevilki
if($stevilo_vabil == AppSettings::getInstance()->getSetting('app_limits-invitation_count_limit')){
$this->sendAlert($alert_type='limit_vabila', $stevilo_vabil);
}
// Ce je poslanih ze vec vabil kot je limit
if($stevilo_vabil > AppSettings::getInstance()->getSetting('app_limits-invitation_count_limit')){
return true;
}
else{
return false;
}
}
// Preverimo stevilo responsov na anketo
public function checkLimitResponses(){
// Ce limit ni nastavljen ignoriramo
if(!AppSettings::getInstance()->getSetting('app_limits-response_count_limit'))
return true;
// Dobimo stevilo odgovorov na anketo
$stevilo_odgovorov = SurveyInfo::getInstance()->getSurveyAnswersCount();
$stevilo_odgovorov_limit = AppSettings::getInstance()->getSetting('app_limits-response_count_limit');
// Obvestilo (mail adminu) posljemo pri dosezeni stevilki
if($stevilo_odgovorov > 0 && $stevilo_odgovorov % $stevilo_odgovorov_limit === 0){
$this->sendAlert($alert_type='limit_responses', $stevilo_odgovorov);
// Deaktiviramo anketo, ce je aktivna ?
}
// Ce je na anketo ze vec responsov kot je limit
if($stevilo_odgovorov > AppSettings::getInstance()->getSetting('app_limits-response_count_limit')){
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;
}
}
// Pri izpolnjevanju ankete preverimo stevilo klikov na minuto - ce jih je prevec, respondenta zavrnemo, drugace se lahko sql zafila in streznik ni vec odziven
public function checkClicksPerMinute(){
// Ce maximum na minuto ni nastavljen ignoriramo limit
if(!AppSettings::getInstance()->getSetting('app_limits-clicks_per_minute_limit'))
return true;
// Preverimo ce gre za izpolnjevanje ankete
if($_SERVER["SCRIPT_NAME"] != '/main/survey/index.php')
return true;
// Preverimo ce gre za prvi prihod na doloceno stran ankete in ne na prvo stran
if(isset($_GET['grupa']))
return true;
// Preverimo ce je id ankete ustrezno nastavljen
if(!isset($this->anketa) || $this->anketa <= 0)
return true;
$click_time = time();
$sql = sisplet_query("SELECT click_count, click_time FROM srv_clicks WHERE ank_id='".$this->anketa."'");
if (mysqli_num_rows($sql) > 0) {
list($click_count, $first_click_time) = mysqli_fetch_array($sql);
// Ce nismo znotraj minute vse resetiramo in pustimo naprej
if($click_time - $first_click_time > 60){
$sqlI = sisplet_query("UPDATE srv_clicks SET click_count='1', click_time='".$click_time."' WHERE ank_id='".$this->anketa."'");
return true;
}
// Click count je ok - pustimo naprej
if($click_count <= AppSettings::getInstance()->getSetting('app_limits-clicks_per_minute_limit')){
$sqlI = sisplet_query("UPDATE srv_clicks SET click_count=click_count+1 WHERE ank_id='".$this->anketa."'");
// Dosegli smo limit - posljemo mail adminu
if($click_count == AppSettings::getInstance()->getSetting('app_limits-clicks_per_minute_limit')){
// TODO - da se poslje samo 1x, drugace konstantno letijo maili:D
// Includamo vse da lahko posljemo mail
//include_once('../../vendor/autoload.php');
// Posljemo mail adminu
//$this->sendAlert($alert_type='limit_clicks', $click_count);
}
return true;
}
// Click count je previsok - ZAVRNEMO
else{
// Prikazemo error stran ki jo refreshamo na 5 sekund
$this->displayClicksPerMinuteError();
return false;
}
}
else{
$sqlI = sisplet_query("INSERT INTO srv_clicks (ank_id, click_count, click_time) VALUES ('".$this->anketa."', '1', '".$click_time."')");
}
return true;
}
// Posljemo obvestilo adminu o prebitem limitu, phishing anketi...
private function sendAlert($alert_type, $count=0){
global $site_url;
// Alerta ne posljemo na lastnih instalacijah
if(isLastnaInstalacija())
return;
// Dobimo hash ankete
$anketa_hash = SurveyInfo::getInstance()->getSurveyColumn('hash');
switch($alert_type){
case 'limit_spremenljivke':
$title = 'Opozorilo - dosežena omejitev vprašanj';
$content = 'Anketa '.$this->anketa.' ima doseženo omejitev števila vprašanj ('.$count.')!';
break;
case 'limit_responses':
$title = 'Opozorilo - dosežena omejitev odgovorov';
$content = 'Anketa '.$this->anketa.' ima doseženo omejitev števila odgovorov ('.$count.')!';
break;
case 'limit_vabila':
$title = 'Opozorilo - dosežena omejitev vabil';
$content = 'Anketa '.$this->anketa.' ima doseženo omejitev poslanih vabil ('.$count.')!';
break;
case 'phishing':
$title = 'Opozorilo - potencialna phishing anketa';
$content = 'Anketa '.$this->anketa.' - potencialen phishing!';
break;
case 'limit_clicks':
$title = 'Opozorilo - dosežena omejitev klikov na minuto';
$content = 'Anketa '.$this->anketa.' ima doseženo omejitev klikov na minuto ('.$count.')!';
break;
}
// Dodamo se link do predogleda
$content .= '
Predogled ankete: '.$site_url.'a/'.$anketa_hash.'&preview=on';
try{
$MA = new MailAdapter($anketa=null, $type='admin');
//$MA->addRecipients('peter.hrvatin@gmail.com');
$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();
}
// Prikazemo stran z errorjem za presezeno stevilo klikov na minuto
private function displayClicksPerMinuteError(){
global $site_url;
$refresh_every = 5;
echo '';
echo '';
echo '