<?php
use Carbon\Carbon;
use App\Lib\Captcha;
use App\Notify\Notify;
use App\Lib\ClientInfo;
use App\Lib\CurlRequest;
use App\Lib\FileManager;
use App\Models\Frontend;
use App\Models\Extension;
use Carbon\CarbonInterval;
use Carbon\CarbonInterface;
use Illuminate\Support\Str;
use App\Models\GeneralSetting;
use App\Lib\GoogleAuthenticator;
use Illuminate\Support\Facades\Cache;
function slug($string)
{
return Illuminate\Support\Str::slug($string);
}
function verificationCode($length)
{
if ($length == 0)
return 0;
$min = pow(10, $length - 1);
$max = (int) ($min - 1) . '9';
return random_int($min, $max);
}
function getNumber($length = 8)
{
$characters = '1234567890';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
function systemDetails()
{
$system['name'] = 'proforum';
$system['version'] = '1.0.0';
$system['build_version'] = '1.0.3';
return $system;
}
function activeTemplate($asset = false)
{
$general = gs();
$template = $general->active_template;
if ($asset)
return 'assets/presets/' . $template . '/';
return 'presets.' . $template . '.';
}
function activeTemplateName()
{
$general = gs();
$template = $general->active_template;
return $template;
}
function loadReCaptcha()
{
return Captcha::reCaptcha();
}
function loadCustomCaptcha($width = '100%', $height = 46, $bgColor = '#003')
{
return Captcha::customCaptcha($width, $height, $bgColor);
}
function verifyCaptcha()
{
return Captcha::verify();
}
function loadExtension($key)
{
$analytics = Extension::where('act', $key)->where('status', 1)->first();
return $analytics ? $analytics->generateScript() : '';
}
function getTrx($length = 12)
{
$characters = 'ABCDEFGHJKMNOPQRSTUVWXYZ123456789';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
function getAmount($amount, $length = 2)
{
$amount = round($amount, $length);
return $amount + 0;
}
function showAmount($amount, $decimal = 2, $separate = true, $exceptZeros = false)
{
$separator = '';
if ($separate) {
$separator = ',';
}
$printAmount = number_format($amount, $decimal, '.', $separator);
if ($exceptZeros) {
$exp = explode('.', $printAmount);
if ($exp[1] * 1 == 0) {
$printAmount = $exp[0];
}
}
return $printAmount;
}
function removeElement($array, $value)
{
return array_diff($array, (is_array($value) ? $value : array($value)));
}
function cryptoQR($wallet)
{
return "https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=$wallet&choe=UTF-8";
}
function keyToTitle($text)
{
return ucfirst(preg_replace("/[^A-Za-z0-9 ]/", ' ', $text));
}
function titleToKey($text)
{
return strtolower(str_replace(' ', '_', $text));
}
function strLimit($title = null, $length = 10)
{
return Str::limit($title, $length);
}
function strWords($title = null, $length = 10)
{
return Str::words($title, $length);
}
function getIpInfo()
{
$ipInfo = ClientInfo::ipInfo();
return $ipInfo;
}
function osBrowser()
{
$osBrowser = ClientInfo::osBrowser();
return $osBrowser;
}
function getTemplates()
{
$param['purchasecode'] = env("PURCHASECODE");
$param['website'] = @$_SERVER['HTTP_HOST'] . @$_SERVER['REQUEST_URI'] . ' - ' . env("APP_URL");
$url = 'https://license.wstacks.com/updates/templates/' . systemDetails()['name'];
$response = CurlRequest::curlPostContent($url, $param);
if ($response) {
return $response;
} else {
return null;
}
}
function getPageSections($arr = false)
{
$jsonUrl = resource_path('views/') . str_replace('.', '/', activeTemplate()) . 'sections/builder/builder.json';
$sections = json_decode(file_get_contents($jsonUrl));
if ($arr) {
$sections = json_decode(file_get_contents($jsonUrl), true);
ksort($sections);
}
return $sections;
}
function getImage($image, $size = null)
{
$clean = '';
if (file_exists($image) && is_file($image)) {
return asset($image) . $clean;
}
if ($size) {
return route('placeholder.image', $size);
}
return asset('assets/images/general/default.png');
}
function notify($user, $templateName, $shortCodes = null, $sendVia = null, $createLog = true)
{
$general = GeneralSetting::first();
$globalShortCodes = [
'site_name' => $general->site_name,
'site_currency' => $general->cur_text,
'currency_symbol' => $general->cur_sym,
];
if (gettype($user) == 'array') {
$user = (object) $user;
}
$shortCodes = array_merge($shortCodes ?? [], $globalShortCodes);
$notify = new Notify($sendVia);
$notify->templateName = $templateName;
$notify->shortCodes = $shortCodes;
$notify->user = $user;
$notify->createLog = $createLog;
$notify->userColumn = getColumnName($user);
$notify->send();
}
function getColumnName($user)
{
$array = explode("\\", get_class($user));
return strtolower(end($array)) . '_id';
}
function getPaginate($paginate = 20)
{
return $paginate;
}
function paginateLinks($data)
{
return $data->appends(request()->all())->links();
}
function menuActive($routeName, $type = null, $param = null)
{
if ($type == 3)
$class = 'side-menu--open';
elseif ($type == 2)
$class = 'sidebar-submenu__open';
else
$class = 'active';
if (is_array($routeName)) {
foreach ($routeName as $key => $value) {
if (request()->routeIs($value))
return $class;
}
} elseif (request()->routeIs($routeName)) {
if ($param) {
if (request()->route(@$param[0]) == @$param[1])
return $class;
else
return;
}
return $class;
}
}
function fileUploader($file, $location, $size = null, $old = null, $thumb = null)
{
$fileManager = new FileManager($file);
$fileManager->path = $location;
$fileManager->size = $size;
$fileManager->old = $old;
$fileManager->thumb = $thumb;
$fileManager->upload();
return $fileManager->filename;
}
function fileManager()
{
return new FileManager();
}
function getFilePath($key)
{
return fileManager()->$key()->path;
}
function getFileSize($key)
{
return fileManager()->$key()->size;
}
function getFileExt($key)
{
return fileManager()->$key()->extensions;
}
function diffForHumans($date)
{
$lang = session()->get('lang');
Carbon::setlocale($lang);
return Carbon::parse($date)->diffForHumans();
}
function myDiffForHumans($date1, $date2)
{
$lang = session()->get('lang');
Carbon::setlocale($lang);
$date1 = Carbon::parse($date1);
$date2 = Carbon::parse($date2);
$result = $date1->diffInDays($date2, false);
echo now()->subDays($result)->diffForHumans(['syntax' => CarbonInterface::DIFF_ABSOLUTE]);
}
function showDateTime($date, $format = 'M Y, h:i A')
{
$lang = session()->get('lang');
Carbon::setlocale($lang);
return Carbon::parse($date)->translatedFormat($format);
}
function getContent($dataKeys, $singleQuery = false, $limit = null, $orderById = false)
{
if ($singleQuery) {
$content = Frontend::where('data_keys', $dataKeys)->orderBy('id', 'desc')->first();
} else {
$article = Frontend::query();
$article->when($limit != null, function ($q) use ($limit) {
return $q->limit($limit);
});
if ($orderById) {
$content = $article->where('data_keys', $dataKeys)->orderBy('id')->get();
} else {
$content = $article->where('data_keys', $dataKeys)->orderBy('id', 'desc')->get();
}
}
return $content;
}
function gatewayRedirectUrl($type = false)
{
if ($type) {
return 'user.deposit.history';
} else {
return 'user.deposit';
}
}
function verifyG2fa($user, $code, $secret = null)
{
$authenticator = new GoogleAuthenticator();
if (!$secret) {
$secret = $user->tsc;
}
$oneCode = $authenticator->getCode($secret);
$userCode = $code;
if ($oneCode == $userCode) {
$user->tv = 1;
$user->save();
return true;
} else {
return false;
}
}
function urlPath($routeName, $routeParam = null)
{
if ($routeParam == null) {
$url = route($routeName);
} else {
$url = route($routeName, $routeParam);
}
$basePath = route('home');
$path = str_replace($basePath, '', $url);
return $path;
}
function showMobileNumber($number)
{
$length = strlen($number);
return substr_replace($number, '***', 2, $length - 4);
}
function showEmailAddress($email)
{
$endPosition = strpos($email, '@') - 1;
return substr_replace($email, '***', 1, $endPosition);
}
function getRealIP()
{
$ip = $_SERVER["REMOTE_ADDR"];
//Deep detect ip
if (filter_var(@$_SERVER['HTTP_FORWARDED'], FILTER_VALIDATE_IP)) {
$ip = $_SERVER['HTTP_FORWARDED'];
}
if (filter_var(@$_SERVER['HTTP_FORWARDED_FOR'], FILTER_VALIDATE_IP)) {
$ip = $_SERVER['HTTP_FORWARDED_FOR'];
}
if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
if (filter_var(@$_SERVER['HTTP_X_REAL_IP'], FILTER_VALIDATE_IP)) {
$ip = $_SERVER['HTTP_X_REAL_IP'];
}
if (filter_var(@$_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP)) {
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
if ($ip == '::1') {
$ip = '127.0.0.1';
}
return $ip;
}
function appendQuery($key, $value)
{
return request()->fullUrlWithQuery([$key => $value]);
}
function dateSort($a, $b)
{
return strtotime($a) - strtotime($b);
}
function dateSorting($arr)
{
usort($arr, "dateSort");
return $arr;
}
function gs()
{
$general = Cache::get('GeneralSetting');
if (!$general) {
$general = GeneralSetting::first();
Cache::put('GeneralSetting', $general);
}
return $general;
}
function number_format_short($n)
{
$is_negative = false;
// check number is negative
if ($n < 0) {
$is_negative = true;
$n = abs($n);
}
if ($n >= 0 && $n < 1000) {
// 1 - 999
$n_format = floor($n);
$suffix = '';
} else if ($n >= 1000 && $n < 1000000) {
// 1k-999k
$n_format = floor($n / 1000);
$suffix = 'K+';
} else if ($n >= 1000000 && $n < 1000000000) {
// 1m-999m
$n_format = floor($n / 1000000);
$suffix = 'M+';
} else if ($n >= 1000000000 && $n < 1000000000000) {
// 1b-999b
$n_format = floor($n / 1000000000);
$suffix = 'B+';
} else if ($n >= 1000000000000) {
// 1t+
$n_format = floor($n / 1000000000000);
$suffix = 'T+';
}
if ($is_negative) {
return !empty($n_format . $suffix) ? '-' . $n_format . $suffix : 0;
}
return !empty($n_format . $suffix) ? $n_format . $suffix : 0;
}