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 ''; #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 ''; #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;
}
}