1498 lines
41 KiB
PHP
1498 lines
41 KiB
PHP
<?php
|
|
|
|
use Cake\Core\Configure;
|
|
|
|
//\Cake\Cache\Cache::disable();
|
|
|
|
function database_connect()
|
|
{
|
|
try {
|
|
$connection = \Cake\Datasource\ConnectionManager::get('default');
|
|
$connected = $connection->connect();
|
|
} catch (\Exception $ex) {
|
|
$connected = false;
|
|
$errorMsg = $ex->getMessage();
|
|
if (method_exists($ex, 'getAttributes')) {
|
|
$attributes = $ex->getAttributes();
|
|
if (isset($errorMsg['message'])) {
|
|
$errorMsg .= '<br />' . $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, '<body') !== false) {
|
|
return false;
|
|
}
|
|
*/
|
|
return strlen($str); //return the exact length
|
|
});
|
|
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
|
|
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function ($ch, $downloadSize, $downloaded, $uploadSize, $uploaded) {
|
|
// If $Downloaded exceeds 128KB, returning non-0 breaks the connection!
|
|
return ($downloaded > (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'] = "<img src='{$logo_url}' alt='{$site_name}' />";
|
|
}
|
|
|
|
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'] = "<img src='{$logo_url}' alt='{$site_name}' />";
|
|
}
|
|
|
|
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 = '<ul class="' . h($options['ul_class']) . '">';
|
|
foreach ($menuItems as $item) {
|
|
if (($item->visibility === 'all') ||
|
|
($user_id && $item->visibility === 'logged') ||
|
|
(!$user_id && $item->visibility === 'guest')
|
|
) {
|
|
$html .= '<li class="' . h($options['li_class']) . ' ' . h($item->class) . '">' .
|
|
'<a class="' . h($options['a_class']) . '" href="' . build_main_domain_url($item->link) . '">' .
|
|
'<span>' . h($item->title) . '</span>' .
|
|
'</a>' .
|
|
'</li>';
|
|
}
|
|
}
|
|
|
|
if ($language) {
|
|
if (count(get_site_languages(true)) > 1) {
|
|
$html .= '<li class="dropdown language-selector">
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
|
|
aria-expanded="false"><i class="fa fa-language"></i> <span class="caret"></span></a>
|
|
<ul class="dropdown-menu">';
|
|
foreach (get_site_languages(true) as $lang) {
|
|
$html .= '<li>';
|
|
$html .= '<a href="' . \Cake\Routing\Router::url($request->getPath()) . '?lang=' . $lang . '">' .
|
|
locale_get_display_name($lang, $lang) . '</a>';
|
|
|
|
$html .= '</li>';
|
|
}
|
|
$html .= '</ul>
|
|
</li>';
|
|
}
|
|
}
|
|
|
|
$html .= '</ul>';
|
|
|
|
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;
|
|
}
|