sid = $anketa; SurveyInfo::SurveyInit($this->sid); } function ajax() { switch ($_GET['a']) { case 'showInvitation': $this->showSimpleMailInvitation(); break; case 'previewInvitation': $this->previewInvitation(); break; case 'sendInvitation': $this->sendInvitation(); break; default: print_r("
");
		print_r($_GET);
		print_r($_POST);
		print_r("
"); ; break; } } function showSimpleMailInvitation() { global $site_url, $lang, $global_user_id; global $admin_type; $pid = (isset($_POST['pid']) && trim($_POST['pid']) != '') ? trim($_POST['pid']) : 'def1'; # najprej preverimo prejemnike $emails = explode( "\n",mysql_real_unescape_string($_POST['emails'] )); #počistimo emaile $valid_emails = array(); foreach ($emails as $email) { $email = trim($email); if ($this->validEmail($email) && !in_array($email,$valid_emails)) { $valid_emails[] = $email; } } if (count($valid_emails) > 0 ) { $css_wide = ' wide'; } # izrišemo osnovni div .divPopUp echo '
'; echo '
'; echo $lang['srv_email_vabila_simple_popup_title']; echo '
'; #PM_top echo '
'; # če ni admin ali manager preverimo koliko emailov je ta uporabnik že uspešno poslal if ($admin_type > 1) { $r = sisplet_query("SELECT count(email)FROM srv_simple_mail_invitation WHERE ank_id='".$this->sid."' AND state='ok' AND usr_id='".$global_user_id."'"); list ($quota) = mysqli_fetch_row($r); if ($quota > SIMPLE_MAIL_QUOTA) { echo '
'; printf ($lang['srv_simple_mail_inv_quota1'], SIMPLE_MAIL_QUOTA); echo '
'; } else if ( ($quota+count($valid_emails)) > SIMPLE_MAIL_QUOTA) { echo '
'; printf ($lang['srv_simple_mail_inv_quota2'], SIMPLE_MAIL_QUOTA); echo '
'; } } # če imamo kaj vlejavnih emailov, potem nadaljujemo if (count($valid_emails) > 0 ) { # preberemo vsa obvestila ankete (2x iz lang fajla in če obstaja še kaj shranjeno) $profiles = $this->getProfiles(); # izrišemo profile # dodamo cover div echo '
'; echo '
'; echo '
'; echo '
'; foreach ($profiles as $key => $profile) { echo '
'.$profile['subject'].'
'; } echo '
'; echo '
'; #floatLeft echo '
'; echo '
'; echo $lang['srv_invitation_subject'].':'; echo '
'; echo ''; echo '
'; echo '
'; echo $lang['srv_invitation_content'].':';; echo '
'; echo ''; echo '
'; echo '
'; #floatLeft echo '
'; echo '
'; echo $lang['srv_invitation_recipients'].':'; echo '
'; echo ''; echo '
'; echo '
'; #floatLeft $buttonsRight = ''.$lang['srv_invitation_send'].''; $buttonsRight .= ''.$lang['srv_invitation_preview'].''; } else { # nimamo veljavnih emailov, obvestimo in damo gumb zapri echo '
'; echo $lang['srv_simple_mail_inv_no_emails']; echo '
'; } echo '
'; echo '
'; # class="popUp_content" echo '
'; #class="inv_FS_btm" echo ''; if (count($valid_emails) > 0 ) { echo $buttonsRight; } echo '
'; #class="inv_FS_btm" echo '
'; #class="divPopUp" } function previewInvitation() { global $lang; # polovimo poslano # najprej preverimo prejemnike $emails = explode( "\n", mysql_real_unescape_string($_POST['emails']) ); #počistimo emaile $valid_emails = array(); foreach ($emails as $email) { $email = trim($email); if ($this->validEmail($email) && !in_array($email,$valid_emails)) { $valid_emails[] = $email; } } reset($valid_emails); $email = current($valid_emails); #polovimo subject $subject = trim($_POST['subject']); $body = nl2br(trim(mysql_real_unescape_string($_POST['body']))); # če mamo SEO $url = SurveyInfo::getSurveyLink(); $body = str_replace( array('#URL#','#EMAIL#'), array('' . $url . '',$email), $body); echo '
'.$subject.'

'; echo '
'; echo $body; echo '
'; echo '
'; echo '
'; echo ''.$lang['srv_zapri'].''; } function sendInvitation() { global $lang, $admin_type, $site_path, $global_user_id; # polovimo poslano # najprej preverimo prejemnike $emails = explode( "\n", mysql_real_unescape_string($_POST['emails']) ); #počistimo emaile $valid_emails = array(); foreach ($emails as $email) { $email = trim($email); if ($this->validEmail($email) && !in_array($email,$valid_emails)) { $valid_emails[] = $email; } } #polovimo subject $subject = trim(mysql_real_unescape_string($_POST['subject'])); $body = nl2br(trim(mysql_real_unescape_string($_POST['body']))); # če mamo SEO $url = SurveyInfo::getSurveyLink(); # zamenjamo sistemske vrednosti $body = str_replace(array('#URL#', '[URL]'), array('' . $url . '','' . $url . ''), $body); $c = 0; # če ni admin ali manager preverimo koliko emailov je ta uporabnik že uspešno poslal if ($admin_type > 1 ) { $r = sisplet_query("SELECT count(email)FROM srv_simple_mail_invitation WHERE ank_id='".$this->sid."' AND state='ok' AND usr_id='".$global_user_id."'"); list ($quota) = mysqli_fetch_row($r); $c = (int)$quota; } # izrišemo osnovni div .divPopUp echo '
'; echo '
'; echo $lang['srv_email_vabila_simple_popup_title']; echo '
'; echo '
'; if (is_array($valid_emails) && count($valid_emails) > 0) { if ($subject != null && $subject != '') { if ($body != null && $body != '') { $send_success = array (); $send_errors = array (); $send_over_quota = array (); Common::getInstance()->Init($this->sid); foreach ($valid_emails AS $email) { if ( $c < SIMPLE_MAIL_QUOTA ) { # povečamo counter za neadmine if ($admin_type > 1) { $c++; } # zamenjamo morebitne meaile $body = str_replace(array('#EMAIL#', '[EMAIL]'), array($email, $email), $body); try { $MA = new MailAdapter($this->anketa, $type='invitation'); $MA->addRecipients($email); $resultX = $MA->sendMail($body, $subject); } catch (Exception $e) { } if ($resultX) { # poslalo ok $send_success[] = $email; } else { # ni poslalo $send_errors[] = $email; } } else { # presegli smo kvoto, zabeležimo email. $send_over_quota[] = $email; } } } else { # Polje Vsebina ne sme biti prazno echo '
'; echo $lang['srv_simple_mail_inv_error1']; echo '
'; $has_error = true; } } else { # Polje Naslov - (zadeva) ne sme biti prazna echo '
'; echo $lang['srv_simple_mail_inv_error2']; echo '
'; $has_error = true; } } else { # ni vnešenih prejemnikov, ali pa emaili niso pravilni echo '
'; echo $lang['srv_simple_mail_inv_error3']; echo '
'; $has_error = true; } echo '
'; if (count($send_success) > 0 || count($send_errors) > 0) { if (count($send_success) > 0) { echo $lang['srv_simple_mail_inv_ok_msg']; echo '
'; echo implode("
",$send_success); echo '
'; } if (count($send_errors) > 0) { echo $lang['srv_simple_mail_inv_error4']; echo '
'; echo '
'; echo implode("
",$send_errors); } } else { echo $lang['srv_simple_mail_inv_error5']; } echo '
'; #floatLeft echo '
'; echo ''.$lang['srv_invitation_subject'].':'.''; echo '
'; echo '
'; echo $subject; echo '
'; echo '
'; echo ''.$lang['srv_invitation_content'].':'.''; echo '
'; echo '
'; echo $body; echo '
'; echo '
'; #floatLeft echo '
'; echo '
'; # class="popUp_content" echo '
'; #class="inv_FS_btm" echo ''.$lang['srv_zapri'].''; echo '
'; #class="inv_FS_btm" echo '
'; #class="divPopUp" # poskrbimo za tracking: statusi emailov: ENUM('ok','error','quota_exceeded'), $values = ''; $prefix = ''; $send_time = date( 'Y-m-d H:i:s'); if (is_array($send_success) && count($send_success)>0) { foreach ($send_success AS $email) { $values .= $prefix."('".$this->sid."', '".$email."', '".$send_time."', 'ok', '".$global_user_id."')"; $prefix = ', '; } } if (is_array($send_errors) && count($send_errors)>0) { foreach ($send_errors AS $email) { $values .= $prefix."('".$this->sid."', '".$email."', '".$send_time."', 'error', '".$global_user_id."')"; $prefix = ', '; } } if (is_array($send_over_quota) && count($send_over_quota)>0) { foreach ($send_over_quota AS $email) { $values .= $prefix."('".$this->sid."', '".$email."', '".$send_time."', 'quota_exceeded', '".$global_user_id."')"; $prefix = ', '; } } if ($values != '') { $insert_string = 'INSERT INTO srv_simple_mail_invitation (ank_id, email, send_time, state, usr_id) VALUES '.$values; sisplet_query($insert_string); sisplet_query("COMMIT"); } } function getProfiles() { global $lang; # preberemo vsa obvestila ankete (2x iz lang fajla in če obstaja še kaj shranjeno) $profiles = array(); $profiles['def1'] = array('subject' => $lang['srv_simple_mail_inv_def1_subject'], 'body' => $lang['srv_simple_mail_inv_def1_body']); $profiles['def2'] = array('subject' => $lang['srv_simple_mail_inv_def2_subject'], 'body' => $lang['srv_simple_mail_inv_def2_body']); return $profiles; } /** Validate an email address. Provide email address (raw input) Returns true if the email address has the email address format and the domain exists. */ function validEmail($email = null) { $isValid = true; $atIndex = strrpos($email, "@"); if (is_bool($atIndex) && !$atIndex) { $isValid = false; } else { $domain = substr($email, $atIndex+1); $local = substr($email, 0, $atIndex); $localLen = strlen($local); $domainLen = strlen($domain); $domain_parts = explode('.',$domain); if ($localLen < 1 || $localLen > 64) { // local part length exceeded $isValid = false; } else if ($domainLen < 1 || $domainLen > 255) { // domain part length exceeded $isValid = false; } else if ($local[0] == '.' || $local[$localLen-1] == '.') { // local part starts or ends with '.' $isValid = false; } else if ($domain[0] == '.' || $domain[$domainLen-1] == '.') { // domain part starts or ends with '.' $isValid = false; } else if (preg_match('/\\.\\./', $local)) { // local part has two consecutive dots $isValid = false; } else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) { // character not valid in domain part $isValid = false; } else if (preg_match('/\\.\\./', $domain)) { // domain part has two consecutive dots $isValid = false; } else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) { // character not valid in local part unless // local part is quoted if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) { $isValid = false; } } else if ( strlen($domain_parts[0]) < 1) { // num chars in $isValid = false; } else if ( strlen($domain_parts[1]) < 1) { $isValid = false; } #if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) { # // domain not found in DNS # $isValid = false; #} } return $isValid; } function countRecipients() { $r = sisplet_query("SELECT count(email)FROM srv_simple_mail_invitation WHERE ank_id='".$this->sid."' AND state='ok'"); list ($quota) = mysqli_fetch_row($r); return (int)$quota; } function getRecipients() { $result = array(); $sql_string = "SELECT smi.*, u.name, u.surname, u.email AS adminmail FROM srv_simple_mail_invitation AS smi LEFT JOIN users AS u ON smi.usr_id = u.id WHERE smi.ank_id='".$this->sid."' ORDER BY smi.send_time DESC"; $sql_query = sisplet_query($sql_string); while ($row = mysqli_fetch_assoc($sql_query)) { $result[] = $row; } return $result; } }