'zzzz',
'd' => 'j',
'DD' => 'l',
'D' => 'D',
'mm' => 'wwww',
'm' => 'n',
'MM' => 'F',
'M' => 'M',
'yyyy' => 'Y',
'yy' => 'y',
// Trick to not overwrite d and m after matching dd and mm
'zzzz' => 'd',
'wwww' => 'm',
);
foreach ($js_to_php_date_format_map as $js_format => $php_format) {
$format = str_replace($js_format, $php_format, $format);
}
return $format;
} // END hesk_map_datepicker_date_format_to_php()
function hesk_translate_timezone_list($timezone_list)
{
global $hesklang;
$translate_months_short = array(
'Jan' => $hesklang['ms01'],
'Feb' => $hesklang['ms02'],
'Mar' => $hesklang['ms03'],
'Apr' => $hesklang['ms04'],
'May' => $hesklang['ms05'],
'Jun' => $hesklang['ms06'],
'Jul' => $hesklang['ms07'],
'Aug' => $hesklang['ms08'],
'Sep' => $hesklang['ms09'],
'Oct' => $hesklang['ms10'],
'Nov' => $hesklang['ms11'],
'Dec' => $hesklang['ms12']
);
return str_replace(array_keys($translate_months_short), array_values($translate_months_short), $timezone_list);
} // END hesk_translate_timezone_list()
function hesk_generate_timezone_list()
{
static $regions = array(
DateTimeZone::AFRICA,
DateTimeZone::AMERICA,
DateTimeZone::ANTARCTICA,
DateTimeZone::ASIA,
DateTimeZone::ATLANTIC,
DateTimeZone::AUSTRALIA,
DateTimeZone::EUROPE,
DateTimeZone::INDIAN,
DateTimeZone::PACIFIC,
);
$timezones = array();
foreach( $regions as $region )
{
$timezones = array_merge( $timezones, DateTimeZone::listIdentifiers( $region ) );
}
$timezone_offsets = array();
foreach( $timezones as $timezone )
{
$tz = new DateTimeZone($timezone);
$timezone_offsets[$timezone] = $tz->getOffset(new DateTime);
}
// sort timezone by timezone name
ksort($timezone_offsets);
//asort($timezone_offsets); // <-- use this to sort by time offset from UTC instead
// Add UTC as the first element
$timezone_offsets = array('UTC' => 0) + $timezone_offsets;
$timezone_list = array();
foreach( $timezone_offsets as $timezone => $offset )
{
$offset_prefix = $offset < 0 ? '-' : '+';
$offset_formatted = gmdate( 'H:i', abs($offset) );
$pretty_offset = "UTC{$offset_prefix}{$offset_formatted}";
$t = new DateTimeZone($timezone);
$c = new DateTime("now", $t);
$current_time = $c->format('d M Y, H:i');
$timezone_list[$timezone] = "{$timezone} - {$current_time}";
}
return $timezone_list;
} // END hesk_generate_timezone_list()
function hesk_testMySQL()
{
global $hesk_settings, $hesklang, $set, $mysql_error, $mysql_log;
define('REQUIRE_MYSQL_VERSION','5.0.7');
// Use MySQLi extension to connect?
$use_mysqli = function_exists('mysqli_connect') ? true : false;
// Get variables
$set['db_host'] = hesk_input( hesk_POST('s_db_host'), $hesklang['err_dbhost']);
$set['db_name'] = hesk_input( hesk_POST('s_db_name'), $hesklang['err_dbname']);
$set['db_user'] = hesk_input( hesk_POST('s_db_user'), $hesklang['err_dbuser']);
$set['db_pass'] = hesk_input( hesk_POST('s_db_pass') );
$set['db_pfix'] = preg_replace('/[^0-9a-zA-Z_]/', '', hesk_POST('s_db_pfix', 'hesk_') );
// Allow & in password and username
$set['db_user'] = str_replace('&', '&', $set['db_user']);
$set['db_pass'] = str_replace('&', '&', $set['db_pass']);
// MySQL tables used by HESK
$tables = array(
$set['db_pfix'].'attachments',
$set['db_pfix'].'auth_tokens',
$set['db_pfix'].'banned_emails',
$set['db_pfix'].'banned_ips',
$set['db_pfix'].'categories',
$set['db_pfix'].'custom_fields',
$set['db_pfix'].'custom_statuses',
$set['db_pfix'].'kb_articles',
$set['db_pfix'].'kb_attachments',
$set['db_pfix'].'kb_categories',
$set['db_pfix'].'logins',
$set['db_pfix'].'log_overdue',
$set['db_pfix'].'mail',
$set['db_pfix'].'mfa_backup_codes',
$set['db_pfix'].'mfa_verification_tokens',
$set['db_pfix'].'notes',
$set['db_pfix'].'online',
$set['db_pfix'].'pipe_loops',
$set['db_pfix'].'replies',
$set['db_pfix'].'reply_drafts',
$set['db_pfix'].'reset_password',
$set['db_pfix'].'service_messages',
$set['db_pfix'].'std_replies',
$set['db_pfix'].'tickets',
$set['db_pfix'].'ticket_templates',
$set['db_pfix'].'users',
);
$connection_OK = false;
$mysql_error = '';
ob_start();
// Connect to MySQL
if ($use_mysqli)
{
mysqli_report(MYSQLI_REPORT_OFF);
// Do we need a special port? Check and connect to the database
if ( strpos($set['db_host'], ':') )
{
list($set['db_host_no_port'], $set['db_port']) = explode(':', $set['db_host']);
try {
$set_link = mysqli_connect($set['db_host_no_port'], $set['db_user'], $set['db_pass'], $set['db_name'], intval($set['db_port']) );
} catch (Exception $e) {
$set_link = false;
}
}
else
{
try {
$set_link = mysqli_connect($set['db_host'], $set['db_user'], $set['db_pass'], $set['db_name']);
} catch (Exception $e) {
$set_link = false;
}
}
if (empty($set_link))
{
ob_end_clean();
$mysql_error = $hesklang['err_dbconn'];
$mysql_log = "(".mysqli_connect_errno().") ".mysqli_connect_error();
return false;
}
$res = mysqli_query($set_link, 'SHOW TABLES FROM `'.mysqli_real_escape_string($set_link, $set['db_name']).'`');
while ($row = mysqli_fetch_row($res))
{
foreach($tables as $k => $v)
{
if ($v == $row[0])
{
unset($tables[$k]);
break;
}
}
}
// Get MySQL version
$mysql_version = mysqli_fetch_assoc( mysqli_query($set_link, 'SELECT VERSION() AS version') );
// Close connections
mysqli_close($set_link);
}
else
{
$set_link = mysql_connect($set['db_host'], $set['db_user'], $set['db_pass']);
if ( ! $set_link)
{
ob_end_clean();
$mysql_error = $hesklang['err_dbconn'];
$mysql_log = mysql_error();
return false;
}
// Select database
if ( ! mysql_select_db($set['db_name'], $set_link) )
{
ob_end_clean();
$mysql_error = $hesklang['err_dbsele'];
$mysql_log = mysql_error();
return false;
}
$res = mysql_query('SHOW TABLES FROM `'.mysql_real_escape_string($set['db_name']).'`', $set_link);
while ($row = mysql_fetch_row($res))
{
foreach($tables as $k => $v)
{
if ($v == $row[0])
{
unset($tables[$k]);
break;
}
}
}
// Get MySQL version
$mysql_version = mysql_fetch_assoc( mysql_query('SELECT VERSION() AS version') );
// Close connections
mysql_close($set_link);
}
// Check MySQL version
if ( version_compare($mysql_version['version'], REQUIRE_MYSQL_VERSION, '<') )
{
ob_end_clean();
$mysql_error = $hesklang['err_dbversion'] . ' ' . $mysql_version['version'];
$mysql_log = '';
return false;
}
// Some tables weren't found, show an error
if (count($tables) > 0)
{
ob_end_clean();
$mysql_error = $hesklang['err_dpi2'].'
'.implode(',
', $tables);
$mysql_log = '';
return false;
}
else
{
$connection_OK = true;
}
ob_end_clean();
return $connection_OK;
} // END hesk_testMySQL()
function hesk_testPOP3($check_old_settings=false)
{
global $hesk_settings, $hesklang, $set;
$set['pop3_host_name'] = hesk_input( hesk_POST('s_pop3_host_name', 'mail.example.com') );
$set['pop3_host_port'] = intval( hesk_POST('s_pop3_host_port', 110) );
$set['pop3_tls'] = empty($_POST['s_pop3_tls']) ? 0 : 1;
$set['pop3_keep'] = empty($_POST['s_pop3_keep']) ? 0 : 1;
$set['pop3_user'] = hesk_input( hesk_POST('s_pop3_user') );
$set['pop3_password'] = hesk_input( hesk_POST('s_pop3_password') );
$set['pop3_conn_type'] = hesk_input(hesk_POST('s_pop3_conn_type'));
$set['pop3_oauth_provider'] = $set['pop3_conn_type'] === 'basic' ? 0 : intval(hesk_POST('s_pop3_oauth_provider'));
// For compatibility with PHP 5.3 magic quotes...
if (HESK_SLASH === false)
{
$set['pop3_password'] = str_replace('\\"', '"', $set['pop3_password']);
}
// Are new settings the same as old? If yes, skip testing connection, assume it works
if ($check_old_settings)
{
$set['tmp_pop3_host_name'] = hesk_input( hesk_POST('tmp_pop3_host_name', 'mail.example.com') );
$set['tmp_pop3_host_port'] = intval( hesk_POST('tmp_pop3_host_port', 110) );
$set['tmp_pop3_tls'] = empty($_POST['tmp_pop3_tls']) ? 0 : 1;
$set['tmp_pop3_keep'] = empty($_POST['tmp_pop3_keep']) ? 0 : 1;
$set['tmp_pop3_user'] = hesk_input( hesk_POST('tmp_pop3_user') );
$set['tmp_pop3_password'] = hesk_input( hesk_POST('tmp_pop3_password') );
$set['tmp_pop3_conn_type'] = hesk_input(hesk_POST('tmp_pop3_conn_type'));
$set['tmp_pop3_oauth_provider'] = $set['tmp_pop3_conn_type'] === 'basic' ? 0 : intval(hesk_POST('tmp_pop3_oauth_provider'));
// For compatibility with PHP 5.3 magic quotes...
if (HESK_SLASH === false)
{
$set['tmp_pop3_password'] = str_replace('\\"', '"', $set['tmp_pop3_password']);
}
if (
$set['tmp_pop3_host_name'] != 'mail.example.com' && // Default setting
$set['tmp_pop3_host_name'] == $set['pop3_host_name'] &&
$set['tmp_pop3_host_port'] == $set['pop3_host_port'] &&
$set['tmp_pop3_tls'] == $set['pop3_tls'] &&
$set['tmp_pop3_keep'] == $set['pop3_keep'] &&
$set['tmp_pop3_user'] == $set['pop3_user'] &&
$set['tmp_pop3_password'] == $set['pop3_password'] &&
$set['tmp_pop3_conn_type'] == $set['pop3_conn_type'] &&
$set['tmp_pop3_oauth_provider'] == $set['pop3_oauth_provider']
)
{
return true;
}
}
// Initiate POP3 class and set parameters
require_once(HESK_PATH . 'inc/mail/pop3.php');
$pop3 = new pop3_class;
$pop3->hostname = $set['pop3_host_name'];
$pop3->port = $set['pop3_host_port'];
$pop3->tls = $set['pop3_tls'];
$pop3->debug = 1;
if ($set['pop3_conn_type']=='oauth') {
require_once(HESK_PATH . 'inc/oauth_functions.inc.php');
$pop3->authentication_mechanism = 'XOAUTH2';
hesk_dbConnect();
$access_token = hesk_fetch_access_token($set['pop3_oauth_provider']);
if (!$access_token) {
global $pop3_error, $pop3_log;
$pop3_error = $hesklang['oauth_error_retrieve'];
$pop3_log = $hesklang['oauth_error_retrieve'];
return false;
}
}
$connection_OK = false;
ob_start();
// Connect to POP3
if(($error=$pop3->Open())=="")
{
// Authenticate
if(($error=$pop3->Login($set['pop3_user'], ($set['pop3_conn_type']=='oauth' ? $access_token : hesk_htmlspecialchars_decode(stripslashes($set['pop3_password'])))))=="")
{
// Get number of messages and total size
if(($error=$pop3->Statistics($messages,$size))=="")
{
global $emails_found;
$emails_found = $messages;
if(($error=$pop3->Close()) == "")
{
// Connection OK
$connection_OK = true;
}
}
}
}
if($error != '')
{
global $pop3_error, $pop3_log;
$pop3_error = $error;
$pop3_log = ob_get_contents();
}
ob_end_clean();
return $connection_OK;
} // END hesk_testPOP3()
function hesk_testSMTP($check_old_settings=false)
{
global $hesk_settings, $hesklang, $set;
// Get variables
$set['smtp_host_name'] = hesk_input( hesk_POST('s_smtp_host_name', 'localhost') );
$set['smtp_host_port'] = intval( hesk_POST('s_smtp_host_port', 25) );
$set['smtp_timeout'] = intval( hesk_POST('s_smtp_timeout', 10) );
$set['smtp_enc'] = hesk_POST('s_smtp_enc');
$set['smtp_enc'] = ($set['smtp_enc'] == 'ssl' || $set['smtp_enc'] == 'tls') ? $set['smtp_enc'] : '';
$set['smtp_noval_cert'] = empty($_POST['s_smtp_noval_cert']) ? 0 : 1;
$set['smtp_user'] = hesk_input( hesk_POST('s_smtp_user') );
$set['smtp_password'] = hesk_input( hesk_POST('s_smtp_password') );
$set['smtp_conn_type'] = hesk_input(hesk_POST('s_smtp_conn_type'));
$set['smtp_oauth_provider'] = $set['smtp_conn_type'] === 'basic' ? 0 : intval(hesk_POST('s_smtp_oauth_provider'));
// For compatibility with PHP 5.3 magic quotes...
if (HESK_SLASH === false)
{
$set['smtp_password'] = str_replace('\\"', '"', $set['smtp_password']);
}
// Are new settings the same as old? If yes, skip testing connection, assume it works
if ($check_old_settings)
{
$set['tmp_smtp_host_name'] = hesk_input( hesk_POST('tmp_smtp_host_name', 'localhost') );
$set['tmp_smtp_host_port'] = intval( hesk_POST('tmp_smtp_host_port', 25) );
$set['tmp_smtp_timeout'] = intval( hesk_POST('tmp_smtp_timeout', 10) );
$set['tmp_smtp_enc'] = hesk_POST('tmp_smtp_enc');
$set['tmp_smtp_enc'] = ($set['tmp_smtp_enc'] == 'ssl' || $set['tmp_smtp_enc'] == 'tls') ? $set['tmp_smtp_enc'] : '';
$set['tmp_smtp_noval_cert'] = empty($_POST['tmp_smtp_noval_cert']) ? 0 : 1;
$set['tmp_smtp_user'] = hesk_input( hesk_POST('tmp_smtp_user') );
$set['tmp_smtp_password'] = hesk_input( hesk_POST('tmp_smtp_password') );
$set['tmp_smtp_conn_type'] = hesk_input(hesk_POST('tmp_smtp_conn_type'));
$set['tmp_smtp_oauth_provider'] = $set['tmp_smtp_conn_type'] === 'basic' ? 0 : intval(hesk_POST('tmp_smtp_oauth_provider'));
// For compatibility with PHP 5.3 magic quotes...
if (HESK_SLASH === false)
{
$set['tmp_smtp_password'] = str_replace('\\"', '"', $set['tmp_smtp_password']);
}
if (
$set['tmp_smtp_host_name'] != 'mail.example.com' && // Default setting
$set['tmp_smtp_host_name'] == $set['smtp_host_name'] &&
$set['tmp_smtp_host_port'] == $set['smtp_host_port'] &&
$set['tmp_smtp_timeout'] == $set['smtp_timeout'] &&
$set['tmp_smtp_enc'] == $set['smtp_enc'] &&
$set['tmp_smtp_noval_cert'] == $set['smtp_noval_cert'] &&
$set['tmp_smtp_user'] == $set['smtp_user'] &&
$set['tmp_smtp_password'] == $set['smtp_password'] &&
$set['tmp_smtp_conn_type'] == $set['smtp_conn_type'] &&
$set['tmp_smtp_oauth_provider'] == $set['smtp_oauth_provider']
)
{
return true;
}
}
ob_start();
//Create a new SMTP instance
$smtp = new SMTP();
//Enable connection-level debug output
if ($hesk_settings['debug_mode']) {
$smtp->do_debug = SMTP::DEBUG_CONNECTION;
// $smtp->do_debug = SMTP::DEBUG_LOWLEVEL;
} else {
$smtp->do_debug = SMTP::DEBUG_SERVER;
}
$smtp->Timeout = $set['smtp_timeout'];
$smtp->Timelimit = $set['smtp_timeout'];
if ($set['smtp_noval_cert']) {
$options = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
} else {
$options = array();
}
if (stripos($set['smtp_host_name'], 'ssl://') === 0) {
$set['smtp_host_name'] = substr($set['smtp_host_name'], 6);
}
$set['smtp_host_name_full'] = ($set['smtp_enc'] == 'ssl') ? 'ssl://' . $set['smtp_host_name'] : $set['smtp_host_name'];
try {
//Connect to an SMTP server
if (!$smtp->connect($set['smtp_host_name_full'], $set['smtp_host_port'], $set['smtp_timeout'], $options)) {
throw new Exception('Connect failed');
}
//Say hello
if (!$smtp->hello(gethostname())) {
throw new Exception('EHLO failed: ' . $smtp->getError()['error']);
}
//Get the list of ESMTP services the server offers
$e = $smtp->getServerExtList();
if ($set['smtp_enc'] == 'tls' && is_array($e)) {
if ( ! array_key_exists('STARTTLS', $e)) {
throw new Exception('Server does not support STARTTLS');
}
$tlsok = $smtp->startTLS();
if (!$tlsok) {
throw new Exception('Failed to start encryption: ' . $smtp->getError()['error']);
}
//Repeat EHLO after STARTTLS
if (!$smtp->hello(gethostname())) {
throw new Exception('EHLO (2) failed: ' . $smtp->getError()['error']);
}
//Get new capabilities list, which will usually now include AUTH if it didn't before
$e = $smtp->getServerExtList();
}
//If server supports authentication, do it (even if no encryption)
if (is_array($e) && array_key_exists('AUTH', $e)) {
if ($set['smtp_conn_type']=='oauth') {
require_once(HESK_PATH . 'inc/oauth_functions.inc.php');
require_once(HESK_PATH . 'inc/mail/HeskOAuthTokenProvider.php');
$oauthTokenProvider = new \PHPMailer\PHPMailer\HeskOAuthTokenProvider();
$oauthTokenProvider->username = $set['smtp_user'];
$oauthTokenProvider->provider = $set['smtp_oauth_provider'];
if ($smtp->authenticate($set['smtp_user'], null, 'XOAUTH2', $oauthTokenProvider)) {
echo 'Connected ok (OAuth)!';
} else {
throw new Exception('Authentication failed: ' . $smtp->getError()['error']);
}
} elseif ($smtp->authenticate($set['smtp_user'], hesk_htmlspecialchars_decode(stripslashes($set['smtp_password'])))) {
echo 'Connected ok!';
} else {
throw new Exception('Authentication failed: ' . $smtp->getError()['error']);
}
}
} catch (Exception $e) {
global $smtp_error, $smtp_log;
$smtp_error = $e->getMessage();
$smtp_log = ob_get_contents();
$smtp->quit();
ob_end_clean();
return false;
}
$smtp->quit();
ob_end_clean();
return true;
} // END hesk_testSMTP()
function hesk_testIMAP($check_old_settings=false)
{
global $hesk_settings, $hesklang, $set;
$set['imap_host_name'] = hesk_input( hesk_POST('s_imap_host_name', 'mail.example.com') );
$set['imap_host_port'] = intval( hesk_POST('s_imap_host_port', 993) );
$set['imap_enc'] = hesk_POST('s_imap_enc');
$set['imap_enc'] = ($set['imap_enc'] == 'ssl' || $set['imap_enc'] == 'tls') ? $set['imap_enc'] : '';
$set['imap_noval_cert'] = empty($_POST['s_imap_noval_cert']) ? 0 : 1;
$set['imap_keep'] = empty($_POST['s_imap_keep']) ? 0 : 1;
$set['imap_user'] = hesk_input( hesk_POST('s_imap_user') );
$set['imap_password'] = hesk_input( hesk_POST('s_imap_password') );
$set['imap_conn_type'] = hesk_input(hesk_POST('s_imap_conn_type'));
$set['imap_oauth_provider'] = $set['imap_conn_type'] === 'basic' ? 0 : intval(hesk_POST('s_imap_oauth_provider'));
// For compatibility with PHP 5.3 magic quotes...
if (HESK_SLASH === false)
{
$set['imap_password'] = str_replace('\\"', '"', $set['imap_password']);
}
// Are new settings the same as old? If yes, skip testing connection, assume it works
if ($check_old_settings)
{
$set['tmp_imap_host_name'] = hesk_input( hesk_POST('tmp_imap_host_name', 'mail.example.com') );
$set['tmp_imap_host_port'] = intval( hesk_POST('tmp_imap_host_port', 993) );
$set['tmp_imap_enc'] = hesk_POST('s_imap_enc');
$set['tmp_imap_enc'] = ($set['tmp_imap_enc'] == 'ssl' || $set['tmp_imap_enc'] == 'tls') ? $set['tmp_imap_enc'] : '';
$set['tmp_imap_noval_cert'] = empty($_POST['tmp_imap_noval_cert']) ? 0 : 1;
$set['tmp_imap_keep'] = empty($_POST['tmp_imap_keep']) ? 0 : 1;
$set['tmp_imap_user'] = hesk_input( hesk_POST('tmp_imap_user') );
$set['tmp_imap_password'] = hesk_input( hesk_POST('tmp_imap_password') );
$set['tmp_imap_conn_type'] = hesk_input(hesk_POST('tmp_imap_conn_type'));
$set['tmp_imap_oauth_provider'] = $set['tmp_imap_conn_type'] === 'basic' ? 0 : intval(hesk_POST('tmp_imap_oauth_provider'));
// For compatibility with PHP 5.3 magic quotes...
if (HESK_SLASH === false)
{
$set['tmp_imap_password'] = str_replace('\\"', '"', $set['tmp_imap_password']);
}
if (
$set['tmp_imap_host_name'] != 'mail.example.com' && // Default setting
$set['tmp_imap_host_name'] == $set['imap_host_name'] &&
$set['tmp_imap_host_port'] == $set['imap_host_port'] &&
$set['tmp_imap_enc'] == $set['imap_enc'] &&
$set['tmp_imap_noval_cert'] == $set['imap_noval_cert'] &&
$set['tmp_imap_keep'] == $set['imap_keep'] &&
$set['tmp_imap_user'] == $set['imap_user'] &&
$set['tmp_imap_password'] == $set['imap_password'] &&
$set['tmp_imap_conn_type'] == $set['imap_conn_type'] &&
$set['tmp_imap_oauth_provider'] == $set['imap_oauth_provider']
)
{
return true;
}
}
$connection_OK = false;
ob_start();
// IMAP mailbox based on required encryption
require_once(HESK_PATH . 'inc/mail/imap/HeskIMAP.php');
$imap = new HeskIMAP();
$imap->host = $set['imap_host_name'];
$imap->port = $set['imap_host_port'];
$imap->username = $set['imap_user'];
if ($set['imap_conn_type'] === 'basic') {
$imap->password = hesk_htmlspecialchars_decode(stripslashes($set['imap_password']));
$imap->useOAuth = false;
} elseif ($set['imap_conn_type'] === 'oauth') {
require_once(HESK_PATH . 'inc/oauth_functions.inc.php');
$access_token = hesk_fetch_access_token($set['imap_oauth_provider']);
if (!$access_token) {
global $imap_error, $imap_log;
$imap_error = $hesklang['oauth_error_retrieve'];
$imap_log = $hesklang['oauth_error_retrieve'];
return false;
}
$imap->accessToken = $access_token;
$imap->useOAuth = true;
$imap->password = null;
}
$imap->readOnly = false;
$imap->ignoreCertificateErrors = $set['imap_noval_cert'];
$imap->connectTimeout = 15;
$imap->responseTimeout = 15;
if ($set['imap_enc'] === 'ssl')
{
$imap->ssl = true;
$imap->tls = false;
}
elseif ($set['imap_enc'] === 'tls')
{
$imap->ssl = false;
$imap->tls = true;
}
else
{
$imap->ssl = false;
$imap->tls = false;
}
if ($imap->login())
{
global $emails_found;
$emails_found = 0;
echo $hesk_settings['debug_mode'] ? "
Connected to the IMAP server "" . $imap->host . ":" . $imap->port . "".\n" : ''; if ($imap->hasUnseenMessages()) { $emails = $imap->getUnseenMessageIDs(); $emails_found = count($emails); } $imap->logout(); } // Any error messages? if($errors = $imap->getErrors()) { global $imap_error, $imap_log; $imap_error = end($errors); reset($errors); $imap_log = ''; foreach ($errors as $error) { $imap_log .= hesk_htmlspecialchars($error) . "\n"; } } else { $connection_OK = true; } ob_end_clean(); return $connection_OK; } // END hesk_testIMAP() function hesk_generate_SPAM_question() { $useChars = 'AEUYBDGHJLMNPRSTVWXZ23456789'; $ac = $useChars[mt_rand(0,27)]; for($i=1;$i<5;$i++) { $ac .= $useChars[mt_rand(0,27)]; } $animals = array('dog','cat','cow','pig','elephant','tiger','chicken','bird','fish','alligator','monkey','mouse','lion','turtle','crocodile','duck','gorilla','horse','penguin','dolphin','rabbit','sheep','snake','spider'); $not_animals = array('ball','window','house','tree','earth','money','rocket','sun','star','shirt','snow','rain','air','candle','computer','desk','coin','TV','paper','bell','car','baloon','airplane','phone','water','space'); $keys = array_rand($animals,2); $my_animals[] = $animals[$keys[0]]; $my_animals[] = $animals[$keys[1]]; $keys = array_rand($not_animals,2); $my_not_animals[] = $not_animals[$keys[0]]; $my_not_animals[] = $not_animals[$keys[1]]; $my_animals[] = $my_not_animals[0]; $my_not_animals[] = $my_animals[0]; $e = mt_rand(1,9); $f = $e + 1; $d = mt_rand(1,9); $s = intval($e + $d); if ($e == $d) { $d ++; $h = $d; $l = $e; } elseif ($e < $d) { $h = $d; $l = $e; } else { $h = $e; $l = $d; } $spam_questions = array( $f => 'What is the next number after '.$e.'? (Use only digits to answer)', 'white' => 'What color is snow? (give a 1 word answer to show you are a human)', 'green' => 'What color is grass? (give a 1 word answer to show you are a human)', 'blue' => 'What color is water? (give a 1 word answer to show you are a human)', $ac => 'Access code (type '.$ac.' here):', $ac => 'Type '.$ac.' here to fight SPAM:', $s => 'Solve this equation to show you are human: '.$e.' + '.$d.' = ', $my_animals[2] => 'Which of these is not an animal: ' . implode(', ',hesk_randomize_array($my_animals)), $my_not_animals[2] => 'Which of these is an animal: ' . implode(', ',hesk_randomize_array($my_not_animals)), $h => 'Which number is higher '.$e.' or '.$d.':', $l => 'Which number is lower '.$e.' or '.$d.':', 'no' => 'Are you a robot? (yes or no)', 'yes' => 'Are you a human? (yes or no)' ); $r = array_rand($spam_questions); $ask = $spam_questions[$r]; $ans = $r; return array($ask,$ans); } // END hesk_generate_SPAM_question() function hesk_randomize_array($array) { $rand_items = array_rand($array, count($array)); $new_array = array(); foreach($rand_items as $value) { $new_array[$value] = $array[$value]; } return $new_array; } // END hesk_randomize_array() function hesk_checkMinMax($myint,$min,$max,$defval) { if ($myint > $max || $myint < $min) { return $defval; } return $myint; } // END hesk_checkMinMax()