connect();
} catch (\Exception $ex) {
$connected = false;
$errorMsg = $ex->getMessage();
if (method_exists($ex, 'getAttributes')) {
$attributes = $ex->getAttributes();
if (isset($errorMsg['message'])) {
$errorMsg .= '
' . $attributes['message'];
}
}
}
return $connected;
}
function is_app_installed()
{
if (Configure::read('Adlinkfly.installed')) {
return true;
}
if ((bool)get_option('installed', 0)) {
return true;
}
return false;
}
function get_option($name, $default = '')
{
if (!database_connect()) {
return $default;
}
try {
static $settings;
if (!isset($settings)) {
$options = \Cake\ORM\TableRegistry::getTableLocator()->get('Options');
//$query = $options->find()->select( ['name', 'value' ] )->cache( 'options' )->all();
$query = $options->find()->select(['name', 'value'])->all();
$settings = [];
foreach ($query as $row) {
$settings[$row->name] = (is_serialized($row->value)) ? unserialize($row->value) : $row->value;
}
}
if (!array_key_exists($name, $settings)) {
return $default;
}
if (is_array($settings[$name])) {
return (!empty($settings[$name])) ? $settings[$name] : $default;
} else {
return (isset($settings[$name]) && strlen($settings[$name]) > 0) ? $settings[$name] : $default;
}
} catch (\Exception $ex) {
return $default;
}
}
// https://github.com/WordPress/WordPress/blob/5.8.1/wp-includes/functions.php#L642
function is_serialized($data, $strict = true)
{
// If it isn't a string, it isn't serialized.
if (!is_string($data)) {
return false;
}
$data = trim($data);
if ('N;' === $data) {
return true;
}
if (strlen($data) < 4) {
return false;
}
if (':' !== $data[1]) {
return false;
}
if ($strict) {
$lastc = substr($data, -1);
if (';' !== $lastc && '}' !== $lastc) {
return false;
}
} else {
$semicolon = strpos($data, ';');
$brace = strpos($data, '}');
// Either ; or } must exist.
if (false === $semicolon && false === $brace) {
return false;
}
// But neither must be in the first X characters.
if (false !== $semicolon && $semicolon < 3) {
return false;
}
if (false !== $brace && $brace < 4) {
return false;
}
}
$token = $data[0];
switch ($token) {
case 's':
if ($strict) {
if ('"' !== substr($data, -2, 1)) {
return false;
}
} elseif (false === strpos($data, '"')) {
return false;
}
// Or else fall through.
case 'a':
case 'O':
return (bool)preg_match("/^{$token}:[0-9]+:/s", $data);
case 'b':
case 'i':
case 'd':
$end = $strict ? '$' : '';
return (bool)preg_match("/^{$token}:[0-9.E+-]+;$end/", $data);
}
return false;
}
/*
function is_serialized($data)
{
if (@unserialize($data) === false) {
return false;
} else {
return true;
}
}
*/
function get_http_headers($url, $options = [])
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
foreach ($options as $option => $value) {
curl_setopt($ch, $option, $value);
}
$headers_string = curl_exec($ch);
curl_close($ch);
$data = [];
//$headers = explode(PHP_EOL, $headers_string);
$headers = explode("\n", str_replace("\r", "\n", $headers_string));
foreach ($headers as $header) {
$parts = explode(':', $header);
if (count($parts) === 2) {
$data[strtolower(trim($parts[0]))] = strtolower(trim($parts[1]));
}
}
return $data;
}
function curlRequest($url, $method = 'GET', $data = [], $headers = [], $options = [])
{
$ch = curl_init();
switch ($method) {
case "POST":
curl_setopt($ch, CURLOPT_POST, 1);
if ($data) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
break;
case "PUT":
curl_setopt($ch, CURLOPT_PUT, 1);
break;
default:
if ($data) {
$url = sprintf("%s?%s", $url, http_build_query($data));
}
}
curl_setopt($ch, CURLOPT_URL, $url);
if ($headers) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if (empty(@ini_get('open_basedir'))) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
}
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
//curl_setopt($ch, CURLOPT_TIMEOUT, 10);
if (null != env('HTTP_USER_AGENT')) {
curl_setopt($ch, CURLOPT_USERAGENT, env('HTTP_USER_AGENT'));
}
foreach ($options as $option => $value) {
curl_setopt($ch, $option, $value);
}
$response = curl_exec($ch);
//$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = '';
if (curl_errno($ch)) {
$error = curl_error($ch);
\Cake\Log\Log::write('error', curl_error($ch));
}
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);
$result = new \stdClass();
$result->header = substr($response, 0, $header_size);
$result->body = substr($response, $header_size);
$result->error = $error;
return $result;
}
function curlHtmlHeadRequest($url, $method = 'GET', $data = [], $headers = [], $options = [])
{
$obj = new \stdClass(); //create an object variable to access class functions and variables
$obj->result = '';
$ch = curl_init();
switch ($method) {
case "POST":
curl_setopt($ch, CURLOPT_POST, 1);
if ($data) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
break;
case "PUT":
curl_setopt($ch, CURLOPT_PUT, 1);
break;
default:
if ($data) {
$url = sprintf("%s?%s", $url, http_build_query($data));
}
}
curl_setopt($ch, CURLOPT_URL, $url);
if ($headers) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $str) use ($obj) {
$obj->result .= $str;
/*
if (stripos($obj->result, '
(128 * 1024)) ? 1 : 0;
});
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if (empty(@ini_get('open_basedir'))) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
}
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
if (null != env('HTTP_USER_AGENT')) {
curl_setopt($ch, CURLOPT_USERAGENT, env('HTTP_USER_AGENT'));
}
foreach ($options as $option => $value) {
curl_setopt($ch, $option, $value);
}
curl_exec($ch);
//$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
//\Cake\Log\Log::write('error', curl_error($ch));
}
curl_close($ch);
return $obj->result;
}
function emptyCache()
{
$dir = new \Cake\Filesystem\Folder(CACHE);
$files = $dir->findRecursive('.*', true);
foreach ($files as $file) {
$file = new \Cake\Filesystem\File($file);
if (!in_array($file->name, ['empty', 'ms_license_response_result'])) {
@$file->delete();
}
$file->close();
}
}
function emptyLogs()
{
$dir = new \Cake\Filesystem\Folder(LOGS);
$files = $dir->findRecursive('.*', true);
foreach ($files as $file) {
$file = new \Cake\Filesystem\File($file);
if (!in_array($file->name, ['empty'])) {
@$file->delete();
}
$file->close();
}
}
function isset_captcha()
{
$enable_captcha = get_option('enable_captcha', 'no');
if ('yes' != $enable_captcha) {
return false;
}
$captcha_type = get_option('captcha_type', 'recaptcha');
if ($captcha_type === 'recaptcha') {
$recaptcha_siteKey = get_option('reCAPTCHA_site_key');
$recaptcha_secretKey = get_option('reCAPTCHA_secret_key');
if (!empty($recaptcha_siteKey) && !empty($recaptcha_secretKey)) {
return true;
}
}
if ($captcha_type === 'invisible-recaptcha') {
$recaptcha_siteKey = get_option('invisible_reCAPTCHA_site_key');
$recaptcha_secretKey = get_option('invisible_reCAPTCHA_secret_key');
if (!empty($recaptcha_siteKey) && !empty($recaptcha_secretKey)) {
return true;
}
}
if ($captcha_type === 'hcaptcha_checkbox') {
$hcaptcha_checkbox_site_key = get_option('hcaptcha_checkbox_site_key');
$hcaptcha_checkbox_secret_key = get_option('hcaptcha_checkbox_secret_key');
if (!empty($hcaptcha_checkbox_site_key) && !empty($hcaptcha_checkbox_secret_key)) {
return true;
}
}
if ($captcha_type === 'solvemedia') {
$solvemedia_challenge_key = get_option('solvemedia_challenge_key');
$solvemedia_verification_key = get_option('solvemedia_verification_key');
$solvemedia_authentication_key = get_option('solvemedia_authentication_key');
if (!empty($solvemedia_challenge_key) &&
!empty($solvemedia_verification_key) &&
!empty($solvemedia_authentication_key)
) {
return true;
}
}
return false;
}
function generate_random_string($length = 10, $special = false)
{
$specialChars = '~!@#$%^&*(){}[],./?';
$alphaNum = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$all_chars = $alphaNum;
if ($special) {
$all_chars .= $specialChars;
}
$string = '';
$i = 0;
while ($i < $length) {
$random = mt_rand(0, strlen($all_chars) - 1);
$string .= $all_chars[$random];
$i = $i + 1;
}
return $string;
}
/**
* Generate random IP address
* @return string Random IP address
*/
function random_ipv4()
{
// http://stackoverflow.com/a/10268612
//return mt_rand(0,255).".".mt_rand(0,255).".".mt_rand(0,255).".".mt_rand(0,255);
// // http://board.phpbuilder.com/showthread.php?10346623-Generating-a-random-IP-Address&p=10830872&viewfull=1#post10830872
return long2ip(rand(0, 255 * 255) * rand(0, 255 * 255));
}
/**
* Get client IP address
* @return string IP address
*/
function get_ip()
{
static $ip;
if (!isset($ip)) {
if (!empty($_SERVER["HTTP_CF_CONNECTING_IP"])) {
$ip = $_SERVER["HTTP_CF_CONNECTING_IP"];
} elseif (!empty($_SERVER["HTTP_FASTLY_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_FASTLY_CLIENT_IP"];
} elseif (!empty($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} elseif (!empty($_SERVER["HTTP_X_REAL_IP"])) {
$ip = $_SERVER["HTTP_X_REAL_IP"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
if (strstr($ip, ',')) {
$tmp = explode(',', $ip);
$ip = trim($tmp[0]);
}
//$ip = random_ipv4();
}
return $ip;
}
/**
* @return bool
*/
function validCrawler()
{
$ips = file_get_contents(APP . 'Library/ips.txt');
$ips = array_filter(array_map('trim', explode("\n", $ips)));
return \App\Library\IpUtils::checkIp(get_ip(), $ips);
}
function price_database_format($price = 0)
{
return number_format(floatval($price), 9, '.', '');
}
function display_price_currency($price, $options = [])
{
$defaults = [
'precision' => get_option('price_decimals', 6),
'places' => get_option('price_decimals', 6),
'locale' => locale_get_default(),
get_option('currency_position', 'before') => get_option('currency_symbol', '$'),
];
$options = array_merge($defaults, $options);
return \Cake\I18n\Number::format($price, $options);
}
function display_date_timezone($time)
{
if (!$time) {
return '';
}
try {
return \Cake\I18n\Time::instance($time)->i18nFormat(null, get_option('timezone', 'UTC'), null);
} catch (\Exception $exception) {
return $time;
}
}
function require_database_upgrade()
{
if (version_compare(APP_VERSION, get_option('app_version', '1.0.0'), '>')) {
return true;
}
return false;
}
function get_logo()
{
$site_name = h(get_option('site_name'));
$logo_url = h(get_option('logo_url'));
$data = ['type' => 'text', 'content' => $site_name];
if (!empty($logo_url)) {
$data['type'] = 'image';
$data['content'] = "
";
}
return $data;
}
function get_logo_alt()
{
$site_name = h(get_option('site_name'));
$logo_url = h(get_option('logo_url_alt'));
$data = ['type' => 'text', 'content' => $site_name];
if (!empty($logo_url)) {
$data['type'] = 'image';
$data['content'] = "
";
}
return $data;
}
function build_main_domain_url($path = null)
{
if (preg_match('#^(http://|https://|//)#i', $path) === 1) {
return $path;
}
static $base_url;
if (!isset($base_url)) {
$request = \Cake\Routing\Router::getRequest();
$base = '';
if ($request !== null) {
$base = $request->getAttribute("base");
}
$main_domain = get_option('main_domain');
$protocol = (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") ? "http://" : "https://";
$base_url = $protocol . $main_domain . $base;
}
$url = $base_url;
if ($path) {
$url .= $path;
}
return $url;
}
function get_short_url($alias = '', $domain = '')
{
//\Cake\Routing\Router::url(['_name' => 'short', 'alias' => 'jimmy'], true);
if (empty($domain)) {
$domain = get_default_short_domain();
}
$request = \Cake\Routing\Router::getRequest();
$scheme = 'http://';
if (get_option('https_shortlinks', false)) {
$scheme = 'https://';
}
$base_url = $scheme . $domain . $request->getAttribute("base");
return $base_url . '/' . $alias;
}
function get_default_short_domain()
{
$default_short_domain = get_option('default_short_domain', '');
if (!empty($default_short_domain)) {
return $default_short_domain;
}
$main_domain = get_option('main_domain', '');
if (!empty($main_domain)) {
return $main_domain;
}
return env("HTTP_HOST", "");
}
function get_multi_domains_list()
{
$domains = explode(',', get_option('multi_domains'));
$domains = array_map('trim', $domains);
$domains = array_filter($domains);
$domains = array_unique($domains);
$domains = array_combine($domains, $domains);
$default_short_domain = get_option('default_short_domain', '');
unset($domains[$default_short_domain]);
return $domains;
}
function get_all_multi_domains_list()
{
$domains = get_multi_domains_list();
$add_domains = [];
$default_short_domain = get_option('default_short_domain', '');
if (!empty($default_short_domain)) {
$add_domains[$default_short_domain] = $default_short_domain;
return $add_domains + $domains;
}
$main_domain = get_option('main_domain', '');
if (!empty($main_domain)) {
$add_domains[$main_domain] = $main_domain;
return $add_domains + $domains;
}
$add_domains[$_SERVER['HTTP_HOST']] = $_SERVER['HTTP_HOST'];
return $add_domains + $domains;
}
function get_all_domains_list()
{
$domains = get_multi_domains_list();
$add_domains = [];
$default_short_domain = get_option('default_short_domain', '');
if (!empty($default_short_domain)) {
$add_domains[$default_short_domain] = $default_short_domain;
$add_domains = $add_domains + $domains;
}
$main_domain = get_option('main_domain', '');
if (!empty($main_domain)) {
$add_domains[$main_domain] = $main_domain;
$add_domains = $add_domains + $domains;
}
$add_domains[$_SERVER['HTTP_HOST']] = $_SERVER['HTTP_HOST'];
return $add_domains + $domains;
}
/**
* @param \App\Model\Entity\Plan $plan
* @return array
*/
function get_allowed_ads($plan = null)
{
if (!$plan) {
$plan = user_or_anonymous()->plan;
}
$ads = [];
if (version_compare(get_option('app_version'), '6.5.0', '<')) {
if (get_option('enable_noadvert', 'yes') == 'yes') {
$ads[0] = __('No Advert');
}
if (get_option('enable_interstitial', 'yes') == 'yes') {
$ads[1] = __('Interstitial Advertisement');
}
if (get_option('enable_banner', 'yes') == 'yes') {
$ads[2] = __('Banner Advertisement');
}
if ((bool)get_option('enable_random_ad_type', 0)) {
if (array_key_exists(1, $ads) && array_key_exists(2, $ads)) {
$ads[3] = __('Random(Interstitial or Banner) Advertisement');
}
}
} else {
if ($plan->direct_redirect) {
$ads[0] = __('No Advert');
}
if ($plan->interstitial_redirect) {
$ads[1] = __('Interstitial Advertisement');
}
if ($plan->banner_redirect) {
$ads[2] = __('Banner Advertisement');
}
if ($plan->random_redirect) {
if (array_key_exists(1, $ads) && array_key_exists(2, $ads)) {
$ads[3] = __('Random(Interstitial or Banner) Advertisement');
}
}
}
return $ads;
}
function get_statistics_reasons()
{
return [
0 => __("---"),
1 => __("Earn"),
2 => __("Disabled Cookies"),
3 => __("Anonymous User"),
4 => __("Adblock"),
5 => __("Proxy"),
6 => __("IP Changed"),
7 => __("Not Unique"),
8 => __("Full Weight"),
9 => __("Default Campaign"),
10 => __("Direct"),
11 => __("Invalid country"),
12 => __("Earnings disabled"),
13 => __("User disabled earnings"),
14 => __("Blocked referer domain"),
15 => __("Reached the hourly limit"),
16 => __("Reached the daily limit"),
17 => __("Reached the monthly limit"),
];
}
function get_link_methods($method = null)
{
$methods = [
1 => __('Website'),
2 => __('Quick Link'),
3 => __('Mass Shrinker'),
4 => __('Full Page Script'),
5 => __('API'),
6 => __('Bookmarklet'),
];
if ($method === null) {
return $methods;
}
return $methods[$method];
}
function get_payment_methods()
{
$payment_methods = [];
if ((bool)get_option('wallet_enable', false)) {
$payment_methods['wallet'] = __("My Wallet");
}
if (get_option('paypal_enable', 'no') == 'yes') {
$payment_methods['paypal'] = __("PayPal");
}
if ((bool)get_option('stripe_enable', false)) {
$payment_methods['stripe'] = __("Stripe");
}
if ((bool)get_option('skrill_enable', false)) {
$payment_methods['skrill'] = __("Skrill");
}
if (get_option('bitcoin_processor', 'coinbase') === 'coinpayments' &&
(bool)get_option('coinpayments_enable', false)) {
$payment_methods['coinpayments'] = __("Bitcoin");
}
if (get_option('bitcoin_processor', 'coinbase') === 'coinbase' &&
get_option('coinbase_enable', 'no') == 'yes') {
$payment_methods['coinbase'] = __("Bitcoin");
}
if (get_option('webmoney_enable', 'no') == 'yes') {
$payment_methods['webmoney'] = __("Webmoney");
}
if ((bool)get_option('perfectmoney_enable', false)) {
$payment_methods['perfectmoney'] = __("Perfect Money");
}
if ((bool)get_option('payeer_enable', false)) {
$payment_methods['payeer'] = __("Payeer");
}
if ((bool)get_option('paystack_enable', false)) {
$payment_methods['paystack'] = __("Paystack");
}
if ((bool)get_option('paytm_enable', false)) {
$payment_methods['paytm'] = __("Paytm");
}
if (get_option('banktransfer_enable', 'no') == 'yes') {
$payment_methods['banktransfer'] = __("Bank Transfer");
}
return $payment_methods;
}
function get_withdrawal_methods()
{
$options = \Cake\ORM\TableRegistry::getTableLocator()->get('Options');
$withdrawal_methods = json_decode($options->findByName('withdraw_methods')->first()->value, true);
$methods = [];
foreach ($withdrawal_methods as $withdrawal_method) {
if ($withdrawal_method['status']) {
$methods[] = $withdrawal_method;
}
}
if ((bool)get_option('wallet_enable', false)) {
$methods[] = [
'id' => 'wallet',
'name' => __('My Wallet'),
'amount' => get_option('wallet_withdrawal_amount', 5),
'image' => '',
'description' => '',
];
}
return $methods;
}
function get_site_languages($all = false)
{
$default_language = get_option('language');
$site_languages = get_option('site_languages', []);
$site_languages = array_combine($site_languages, $site_languages);
unset($site_languages[$default_language]);
if ($all === true) {
$site_languages[$default_language] = $default_language;
}
ksort($site_languages);
return $site_languages;
}
/**
* @return \App\Model\Entity\User|null
*/
function user()
{
$request = \Cake\Routing\Router::getRequest();
$user_id = $request->getSession()->read('Auth.User.id');
if ($user_id === null) {
return null;
}
/**
* @var \App\Model\Table\UsersTable $users
*/
$users = \Cake\ORM\TableRegistry::getTableLocator()->get('Users');
return $users->find()->contain(['Plans'])->where(['Users.id' => $user_id])->first();
}
/**
* @return \App\Model\Entity\User
*/
function user_or_anonymous()
{
$user = user();
if ($user) {
return $user;
}
/**
* @var \App\Model\Table\UsersTable $usersTable
*/
$usersTable = \Cake\ORM\TableRegistry::getTableLocator()->get('Users');
return $usersTable->find()->contain(['Plans'])->where(['Users.id' => 1])->first();
}
/**
* @param int $user_id
* @return \App\Model\Entity\Plan
*/
function get_user_plan($user_id)
{
/**
* @var \App\Model\Entity\User $user
*/
$user = \Cake\ORM\TableRegistry::getTableLocator()->get('Users')->find()
->contain(['Plans'])->where(['Users.id' => $user_id])->first();
$expiration = $user->expiration;
/*
if (is_object($user)) {
$expiration = $user->expiration;
}
if (is_array($user)) {
$expiration = $user['expiration'];
$user = json_decode(json_encode($user), false);
}
*/
if ($user->plan_id == 1) {
return $user->plan;
}
static $default_plan;
if (!isset($default_plan)) {
$default_plan = \Cake\ORM\TableRegistry::getTableLocator()->get('Plans')->get(1);
}
if (!isset($expiration)) {
return $user->plan;
}
$time = new \Cake\I18n\Time($expiration);
if ($time->isPast()) {
return $default_plan;
}
return $user->plan;
}
function campaign_statuses($id = null)
{
$statuses = [
1 => __('Active'),
2 => __('Paused'),
3 => __('Canceled'),
4 => __('Finished'),
5 => __('Under Review'),
6 => __('Pending Payment'),
7 => __('Invalid Payment'),
8 => __('Refunded'),
];
if ($id === null) {
return $statuses;
}
return $statuses[$id];
}
function withdraw_statuses($id = null)
{
$statuses = [
1 => __('Approved'),
2 => __('Pending'),
3 => __('Complete'),
4 => __('Cancelled'),
5 => __('Returned'),
];
if ($id === null) {
return $statuses;
}
return $statuses[$id];
}
function invoice_statuses($id = null)
{
$statuses = [
1 => __('Paid'),
2 => __('Unpaid'),
3 => __('Canceled'),
4 => __('Invalid Payment'),
5 => __('Refunded'),
];
if ($id === null) {
return $statuses;
}
return $statuses[$id];
}
function data_encrypt($value)
{
$key = \Cake\Utility\Security::getSalt();
$value = serialize($value);
$value = \Cake\Utility\Security::encrypt($value, $key);
return base64_encode($value);
}
function data_decrypt($value)
{
if (!is_string($value)) {
return false;
}
$key = \Cake\Utility\Security::getSalt();
$value = base64_decode($value);
$value = \Cake\Utility\Security::decrypt($value, $key);
return unserialize($value);
}
function createEmailFile()
{
/**
* @var \App\Model\Table\OptionsTable|\App\Model\Entity\Option[]
*/
$options = \Cake\ORM\TableRegistry::getTableLocator()->get('Options');
$config = [
'site_name' => $options->findByName('site_name')->first()->value,
'email_from' => $options->findByName('email_from')->first()->value,
'email_method' => $options->findByName('email_method')->first()->value,
'email_smtp_host' => $options->findByName('email_smtp_host')->first()->value,
'email_smtp_port' => $options->findByName('email_smtp_port')->first()->value,
'email_smtp_username' => $options->findByName('email_smtp_username')->first()->value,
'email_smtp_password' => $options->findByName('email_smtp_password')->first()->value,
'email_smtp_tls' => 'false',
];
$config = array_map(function ($value) {
return addcslashes($value, '\'');
}, $config);
$email_smtp_security = $options->findByName('email_smtp_security')->first()->value;
if (preg_match('#^ssl://#i', $config['email_smtp_host'])) {
$config['email_smtp_host'] = preg_replace('#^ssl://#i', '', $config['email_smtp_host']);
$email_smtp_host = $options->findByName('email_smtp_host')->first();
$email_smtp_host->value = $config['email_smtp_host'];
$options->save($email_smtp_host);
}
if ($email_smtp_security == 'tls') {
$config['email_smtp_tls'] = 'true';
}
if ($email_smtp_security == 'ssl') {
$config['email_smtp_host'] = 'ssl://' . $config['email_smtp_host'];
}
$result = copy(CONFIG . 'email.install', CONFIG . 'email.php');
if (!$result) {
\Cake\Log\Log::write('debug', 'Could not copy email.php file.');
return false;
}
$file = new \Cake\Filesystem\File(CONFIG . 'email.php');
$content = $file->read();
foreach ($config as $configKey => $configValue) {
$content = str_replace('{' . $configKey . '}', $configValue, $content);
}
if (!$file->write($content)) {
\Cake\Log\Log::write('debug', 'Could not write email.php file.');
return false;
}
return true;
}
/**
* @see https://github.com/symfony/polyfill-php55/blob/v1.10.0/Php55ArrayColumn.php#L32
*
* @param array $input
* @param $columnKey
* @param null $indexKey
*
* @return array
*/
function array_column_polyfill(array $input, $columnKey, $indexKey = null)
{
return array_column($input, $columnKey, $indexKey);
$output = [];
foreach ($input as $row) {
$key = $value = null;
$keySet = $valueSet = false;
if (null !== $indexKey && array_key_exists($indexKey, $row)) {
$keySet = true;
$key = (string)$row[$indexKey];
}
if (null === $columnKey) {
$valueSet = true;
$value = $row;
} elseif (\is_array($row) && \array_key_exists($columnKey, $row)) {
$valueSet = true;
$value = $row[$columnKey];
}
if ($valueSet) {
if ($keySet) {
$output[$key] = $value;
} else {
$output[] = $value;
}
}
}
return $output;
}
function menu_display($name, $options = [], $language = false)
{
$request = \Cake\Routing\Router::getRequest();
$user_id = $request->getSession()->read('Auth.User.id');
/**
* @var \App\Model\Table\OptionsTable|\App\Model\Entity\Option[]
*/
$optionsTable = \Cake\ORM\TableRegistry::getTableLocator()->get('Options')
->addBehavior('Translate', ['fields' => ['value']]);
$menu = $optionsTable->findByName($name)->first();
$menuItems = json_decode($menu->value);
$options = array_merge([
'ul_class' => '',
'li_class' => '',
'a_class' => '',
], $options);
$html = '';
foreach ($menuItems as $item) {
if (($item->visibility === 'all') ||
($user_id && $item->visibility === 'logged') ||
(!$user_id && $item->visibility === 'guest')
) {
$html .= '- ' .
'' .
'' . h($item->title) . '' .
'' .
'
';
}
}
if ($language) {
if (count(get_site_languages(true)) > 1) {
$html .= '-
';
}
}
$html .= '
';
return $html;
}
function isScheduleCronRunning()
{
$schedule_cron_last_time_run = get_option('schedule_cron_last_time_run');
if (!$schedule_cron_last_time_run) {
return false;
}
return \Cake\I18n\Time::createFromFormat('Y-m-d H:i:s', $schedule_cron_last_time_run)->addMinutes(10)->isFuture();
}
function isQueueCronRunning()
{
$file_path = ROOT . '/tmp/queue.lock';
if (!file_exists($file_path)) {
if (!touch($file_path)) {
return false;
}
}
$lock_pointer = fopen($file_path, "r+");
if (!flock($lock_pointer, LOCK_EX | LOCK_NB, $wouldBlock)) {
if ($wouldBlock) {
return true;
}
}
return false;
}
/**
* @param string $string
* @param string $secret_key
*
* @return string
*
* @throws \Exception
*/
function external_integration_encrypt($string, $secret_key)
{
return \App\Library\ExternalEncryptor::encrypt($string, $secret_key);
}
/**
* @param string $encoded_string
* @param string $secret_key
*
* @return string
*
* @throws \Exception
*/
function external_integration_decrypt($encoded_string, $secret_key)
{
return \App\Library\ExternalEncryptor::decrypt($encoded_string, $secret_key);
}
function get_countries($campaing = false)
{
$countries = [
"AF" => __("Afganistan"),
"AL" => __("Albania"),
"DZ" => __("Algeria"),
"AS" => __("American Samoa"),
"AD" => __("Andorra"),
"AO" => __("Angola"),
"AI" => __("Anguilla"),
"AQ" => __("Antarctica"),
"AG" => __("Antigua and Barbuda"),
"AR" => __("Argentina"),
"AM" => __("Armenia"),
"AW" => __("Aruba"),
"AU" => __("Australia"),
"AT" => __("Austria"),
"AX" => __("Åland Islands"),
"AZ" => __("Azerbaijan"),
"BS" => __("Bahamas"),
"BH" => __("Bahrain"),
"BD" => __("Bangladesh"),
"BB" => __("Barbados"),
"BY" => __("Belarus"),
"BE" => __("Belgium"),
"BZ" => __("Belize"),
"BJ" => __("Benin"),
"BM" => __("Bermuda"),
"BT" => __("Bhutan"),
"BO" => __("Bolivia"),
"BA" => __("Bosnia and Herzegowina"),
"BW" => __("Botswana"),
"BV" => __("Bouvet Island"),
"BR" => __("Brazil"),
"IO" => __("British Indian Ocean Territory"),
"BN" => __("Brunei Darussalam"),
"BG" => __("Bulgaria"),
"BF" => __("Burkina Faso"),
"BI" => __("Burundi"),
"KH" => __("Cambodia"),
"CM" => __("Cameroon"),
"CA" => __("Canada"),
"CV" => __("Cape Verde"),
"KY" => __("Cayman Islands"),
"CF" => __("Central African Republic"),
"TD" => __("Chad"),
"CL" => __("Chile"),
"CN" => __("China"),
"CX" => __("Christmas Island"),
"CC" => __("Cocos (Keeling) Islands"),
"CO" => __("Colombia"),
"KM" => __("Comoros"),
"CG" => __("Congo"),
"CD" => __("Congo, the Democratic Republic of the"),
"CK" => __("Cook Islands"),
"CR" => __("Costa Rica"),
"CI" => __("Cote d'Ivoire"),
"CW" => __("Curaçao"),
"HR" => __("Croatia (Hrvatska)"),
"CU" => __("Cuba"),
"CY" => __("Cyprus"),
"CZ" => __("Czech Republic"),
"DK" => __("Denmark"),
"DJ" => __("Djibouti"),
"DM" => __("Dominica"),
"DO" => __("Dominican Republic"),
"TP" => __("East Timor"),
"EC" => __("Ecuador"),
"EG" => __("Egypt"),
"SV" => __("El Salvador"),
"GQ" => __("Equatorial Guinea"),
"ER" => __("Eritrea"),
"EE" => __("Estonia"),
"ET" => __("Ethiopia"),
"FK" => __("Falkland Islands (Malvinas)"),
"FO" => __("Faroe Islands"),
"FJ" => __("Fiji"),
"FI" => __("Finland"),
"FR" => __("France"),
"FX" => __("France, Metropolitan"),
"GF" => __("French Guiana"),
"PF" => __("French Polynesia"),
"TF" => __("French Southern Territories"),
"GA" => __("Gabon"),
"GM" => __("Gambia"),
"GE" => __("Georgia"),
"DE" => __("Germany"),
"GH" => __("Ghana"),
"GI" => __("Gibraltar"),
"GR" => __("Greece"),
"GL" => __("Greenland"),
"GD" => __("Grenada"),
"GP" => __("Guadeloupe"),
"GU" => __("Guam"),
"GT" => __("Guatemala"),
"GN" => __("Guinea"),
"GW" => __("Guinea-Bissau"),
"GY" => __("Guyana"),
"HT" => __("Haiti"),
"HM" => __("Heard and Mc Donald Islands"),
"VA" => __("Holy See (Vatican City State)"),
"HN" => __("Honduras"),
"HK" => __("Hong Kong"),
"HU" => __("Hungary"),
"IS" => __("Iceland"),
"IM" => __("Isle of Man"),
"IN" => __("India"),
"ID" => __("Indonesia"),
"IR" => __("Iran (Islamic Republic of)"),
"IQ" => __("Iraq"),
"IE" => __("Ireland"),
"IL" => __("Israel"),
"IT" => __("Italy"),
"JE" => __("Jersey"),
"JM" => __("Jamaica"),
"JP" => __("Japan"),
"JO" => __("Jordan"),
"KZ" => __("Kazakhstan"),
"KE" => __("Kenya"),
"KI" => __("Kiribati"),
"KP" => __("Korea, Democratic People's Republic of"),
"KR" => __("Korea, Republic of"),
"XK" => __("Kosovo"),
"KW" => __("Kuwait"),
"KG" => __("Kyrgyzstan"),
"LA" => __("Lao People's Democratic Republic"),
"LV" => __("Latvia"),
"LB" => __("Lebanon"),
"LS" => __("Lesotho"),
"LR" => __("Liberia"),
"LY" => __("Libyan Arab Jamahiriya"),
"LI" => __("Liechtenstein"),
"LT" => __("Lithuania"),
"LU" => __("Luxembourg"),
"MO" => __("Macau"),
"MK" => __("Macedonia, The Former Yugoslav Republic of"),
"MG" => __("Madagascar"),
"MW" => __("Malawi"),
"MY" => __("Malaysia"),
"MV" => __("Maldives"),
"ML" => __("Mali"),
"MT" => __("Malta"),
"MH" => __("Marshall Islands"),
"MQ" => __("Martinique"),
"MR" => __("Mauritania"),
"MU" => __("Mauritius"),
"YT" => __("Mayotte"),
"MX" => __("Mexico"),
"FM" => __("Micronesia, Federated States of"),
"MD" => __("Moldova, Republic of"),
"MC" => __("Monaco"),
"ME" => __("Montenegro"),
"MN" => __("Mongolia"),
"MS" => __("Montserrat"),
"MA" => __("Morocco"),
"MZ" => __("Mozambique"),
"MM" => __("Myanmar"),
"NA" => __("Namibia"),
"NR" => __("Nauru"),
"NP" => __("Nepal"),
"NL" => __("Netherlands"),
"AN" => __("Netherlands Antilles"),
"NC" => __("New Caledonia"),
"NZ" => __("New Zealand"),
"NI" => __("Nicaragua"),
"NE" => __("Niger"),
"NG" => __("Nigeria"),
"NU" => __("Niue"),
"NF" => __("Norfolk Island"),
"MP" => __("Northern Mariana Islands"),
"NO" => __("Norway"),
"OM" => __("Oman"),
"PK" => __("Pakistan"),
"PW" => __("Palau"),
"PA" => __("Panama"),
"PG" => __("Papua New Guinea"),
"PY" => __("Paraguay"),
"PE" => __("Peru"),
"PH" => __("Philippines"),
"PN" => __("Pitcairn"),
"PL" => __("Poland"),
"PT" => __("Portugal"),
"PR" => __("Puerto Rico"),
"PS" => __("Palestine"),
"QA" => __("Qatar"),
"RE" => __("Reunion"),
"RO" => __("Romania"),
"RS" => __("Republic of Serbia"),
"RU" => __("Russian Federation"),
"RW" => __("Rwanda"),
"KN" => __("Saint Kitts and Nevis"),
"LC" => __("Saint LUCIA"),
"VC" => __("Saint Vincent and the Grenadines"),
"WS" => __("Samoa"),
"SM" => __("San Marino"),
"ST" => __("Sao Tome and Principe"),
"SA" => __("Saudi Arabia"),
"SN" => __("Senegal"),
"SC" => __("Seychelles"),
"SL" => __("Sierra Leone"),
"SG" => __("Singapore"),
"SK" => __("Slovakia (Slovak Republic)"),
"SI" => __("Slovenia"),
"SB" => __("Solomon Islands"),
"SO" => __("Somalia"),
"SX" => __("Sint Maarten"),
"ZA" => __("South Africa"),
"GS" => __("South Georgia and the South Sandwich Islands"),
"ES" => __("Spain"),
"LK" => __("Sri Lanka"),
"SH" => __("St. Helena"),
"PM" => __("St. Pierre and Miquelon"),
"SD" => __("Sudan"),
"SR" => __("Suriname"),
"SJ" => __("Svalbard and Jan Mayen Islands"),
"SZ" => __("Swaziland"),
"SE" => __("Sweden"),
"CH" => __("Switzerland"),
"SY" => __("Syrian Arab Republic"),
"TW" => __("Taiwan, Province of China"),
"TJ" => __("Tajikistan"),
"TZ" => __("Tanzania, United Republic of"),
"TH" => __("Thailand"),
"TG" => __("Togo"),
"TK" => __("Tokelau"),
"TO" => __("Tonga"),
"TT" => __("Trinidad and Tobago"),
"TN" => __("Tunisia"),
"TR" => __("Turkey"),
"TM" => __("Turkmenistan"),
"TC" => __("Turks and Caicos Islands"),
"TV" => __("Tuvalu"),
"UG" => __("Uganda"),
"UA" => __("Ukraine"),
"AE" => __("United Arab Emirates"),
"GB" => __("United Kingdom"),
"US" => __("United States"),
"UM" => __("United States Minor Outlying Islands"),
"UY" => __("Uruguay"),
"UZ" => __("Uzbekistan"),
"VU" => __("Vanuatu"),
"VE" => __("Venezuela"),
"VN" => __("Vietnam"),
"VG" => __("Virgin Islands (British)"),
"VI" => __("Virgin Islands (U.S.)"),
"WF" => __("Wallis and Futuna Islands"),
"EH" => __("Western Sahara"),
"YE" => __("Yemen"),
"YU" => __("Yugoslavia"),
"ZM" => __("Zambia"),
"ZW" => __("Zimbabwe"),
];
if ($campaing) {
$countries = ['all' => __('Worldwide Deal(All Countries)')] + $countries;
}
return $countries;
}