ul evealvacija if ((int)$anketa > 0){ $this->anketa = $anketa; # polovimo vrsto tabel (aktivne / neaktivne) SurveyInfo :: getInstance()->SurveyInit($this->anketa); $this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString(); } } // Prikazemo nastavitve pri vklopu naprednega modula public function displaySettings(){ global $lang; global $site_url; $preklici_url = ltrim(str_replace("&s=1","",$_SERVER['REQUEST_URI']),"/"); $preklici_url = "'". $site_url . $preklici_url . "'"; $rowA = SurveyInfo::getInstance()->getSurveyRow(); $row = $this->getEmailAccessSettings(); echo '
'.$lang['settings'].''; // Captcha echo '
'; echo ' '; echo ' '; echo '
'; // Text pogoji uporabe $pogoji_warning = $row['terms_text'] == '' ? true : false; echo '
'; echo '

'.$lang['user_agreement'] . ($pogoji_warning ? ' (polje obvezno izpolnite)' : '').':

'; echo ' '; echo '
'; echo '
'; // Gumb shrani echo '
'; echo ''; echo ''; echo '
'; echo '
'; } // Izvedemo vse potrebno, ko modul aktiviramo public function activateEmailAccess(){ global $lang; // privzeto besedilo za pogoje uporabe $terms_text = ''; // Vstavimo vrstico z nastavitvami $sql1 = sisplet_query("INSERT INTO srv_email_access_settings (ank_id, terms_text) VALUES ('".$this->anketa."', '".$terms_text."')"); // Ugasnimo belezenje parapodatkov - samo za mju if(true){ SurveySetting::getInstance()->Init($this->anketa); SurveySetting::getInstance()->setSurveyMiscSetting('survey_ip', '1'); SurveySetting::getInstance()->setSurveyMiscSetting('survey_browser', '1'); SurveySetting::getInstance()->setSurveyMiscSetting('survey_referal', '1'); //SurveySetting::getInstance()->setSurveyMiscSetting('survey_date', '1'); } } // Vrnemo nastavitve modula public function getEmailAccessSettings($what = ''){ if($what != ''){ $sql = sisplet_query("SELECT ".$what." FROM srv_email_access_settings WHERE ank_id='".$this->anketa."'"); $row = mysqli_fetch_array($sql); return $row[$what]; } else{ $sql = sisplet_query("SELECT * FROM srv_email_access_settings WHERE ank_id='".$this->anketa."'"); $row = mysqli_fetch_array($sql); return $row; } } // Zgeneriramo kodo za dostop do ankete in jo posljemo na mail public function sendAccessCode($email){ global $lang; $return = array(); // Dobimo domeno iz emaila $parts = explode("@", $email); $domain = $parts[1]; // Preverimo ce je veljaven email if(!validEmail($email)){ $return['error']['email'] = 'Neveljaven email'; } elseif($this->checkEmailBlacklist($domain)){ $return['error']['email'] = 'Uporaba email naslova z domene '.$domain.' ni dovoljena.'; } // Preverimo, ce email ze obstaja v bazi else{ $sql = sisplet_query("SELECT * FROM srv_email_access WHERE ank_id='".$this->anketa."' AND email='".$email."' AND status!='0'"); if(mysqli_num_rows($sql) > 0){ $return['error']['email'] = 'Na ta email je bila že poslana koda.'; } } // Preverimo, ce se je strinjal s pogoji uporabe if(isset($_POST['terms']) && $_POST['terms'] != '1'){ $return['error']['terms'] = 'Strinjanje s pogoji uporabe je obvezno.'; } if(isset($return['error']['email']) || isset($return['error']['terms'])){ return $return; } // Zgeneriramo 8 mestno kodo za dostop //$chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; $chars = '0123456789'; // Preverimo za vsak slučaj, da koda še ne obstaja $code_ok = false; while(!$code_ok){ $code = substr(str_shuffle($chars), 0, 6); $sql = sisplet_query("SELECT * FROM srv_email_access WHERE ank_id='".$this->anketa."' AND access_code='".$code."'"); if(mysqli_num_rows($sql) == 0){ $code_ok = true; } } // Vstavimo podatke v bazo $sql = sisplet_query("INSERT INTO srv_email_access (ank_id, email, access_code, status) values ('".$this->anketa."', '".$email."', '".$code."', '0') ON DUPLICATE KEY UPDATE access_code='".$code."' "); // Sestavimo email za posiljanje $email_subject = $lang['srv_email_access_email_subject']; $email_body = '

'.$lang['srv_email_access_email_body0'].'

'; $email_body .= '

'.$lang['srv_email_access_email_body1'].'

'; $email_body .= ''.substr($code, 0, 3).' '.substr($code, 3, 6).''; $email_body .= '

'.$lang['srv_email_access_email_body2'].' \''.SurveyInfo::getSurveyTitle().'\'.

'; $email_body .= '

'.$lang['srv_email_access_email_body3'].'

'; // Posljemo email s kodo try{ $MA = new MailAdapter($this->anketa, $type='invitation'); $MA->addRecipients($email); $resultX = $MA->sendMail($email_body, $email_subject); } catch (Exception $e) { $return['error']['email'] = 'Napaka pri pošiljanju kode na email.'; return $return; } // Na koncu popravimo status, da je bil email uspesno poslan $sql = sisplet_query("UPDATE srv_email_access SET status='1' WHERE ank_id='".$this->anketa."' AND email='".$email."'"); return true; } // Preverimo, ce imamo vneseno kodo in ce se ni bila uporabljena - potem ustvarimo cookie in nastavimo status na uporabljeno kodo public function checkAccessCode($code){ // Preverimo kodo $sql = sisplet_query("SELECT * FROM srv_email_access WHERE ank_id='".$this->anketa."' AND access_code='".$code."'"); // Koda ne obstaja v bazi if(mysqli_num_rows($sql) == 0){ $return['error'] = 'Vnešena koda ni pravilna!'; return $return; } $row = mysqli_fetch_array($sql); // Koda še ni bila poslana if($row['status'] == '0'){ $return['error'] = 'Vnešena koda še ni bila aktivirana!'; return $return; } // Koda je bila že uporabljena if($row['status'] == '2'){ $return['error'] = 'Vnešena koda je bila že uporabljena!'; return $return; } // Vse ok, nastavimo status da je bila koda uporabljena in nastavimo cookie $sql = sisplet_query("UPDATE srv_email_access SET status='2' WHERE ank_id='".$this->anketa."' AND access_code='".$code."'"); return true; } // Preverimo, ce email obstaja na blacklisti zacasnih emailov private function checkEmailBlacklist($domain){ global $site_path; $filename = $site_path."/admin/survey/modules/mod_email_access/disposable_email_blocklist.txt"; $file = new SplFileObject($filename); $found = false; // Loop through each line in the file foreach ($file as $line) { $line = trim($line); // Check if the line matches the email if ($line === $domain) { $found = true; break; } } $file = null; // Close the file return $found; } // Pobrisemo vse kode povezane za anketo (za mju - 7 dni po deaktivaciji ankete) private static function deleteSurveyEmailsAndCodes($ank_id){ if ((int)$ank_id <= 0) return; $sql = sisplet_query("DELETE * FROM srv_email_access WHERE ank_id='".$ank_id."'"); } public function ajax() { if(isset($_GET['a']) && $_GET['a'] == 'save_settings'){ $captcha = isset($_POST['captcha']) ? $_POST['captcha'] : '0'; $terms_text = isset($_POST['terms_text']) ? $_POST['terms_text'] : ''; $sql = sisplet_query("UPDATE srv_email_access_settings SET captcha='".$captcha."', terms_text='".$terms_text."' WHERE ank_id='".$this->anketa."' "); if (!$sql) echo mysqli_error($GLOBALS['connect_db']); $this->displaySettings(); } } }