From 82019f4833b1a1ff95828ddb34966f3fd0730ea3 Mon Sep 17 00:00:00 2001
From: Peter Papp
Date: Fri, 9 Jul 2021 12:05:09 +0200
Subject: [PATCH] safety functions helper
---
app/Http/helpers.php | 1760 ++++++++++++++++++++++--------------------
1 file changed, 922 insertions(+), 838 deletions(-)
diff --git a/app/Http/helpers.php b/app/Http/helpers.php
index 01c2e18b..0d211572 100644
--- a/app/Http/helpers.php
+++ b/app/Http/helpers.php
@@ -16,900 +16,984 @@ use Illuminate\Support\Facades\Storage;
use Intervention\Image\ImageManagerStatic as Image;
use Illuminate\Database\Eloquent\ModelNotFoundException;
-/**
- * Obfuscate email
- *
- * @param $email
- * @return string
- */
-function obfuscate_email($email)
-{
- $em = explode('@', $email);
- $name = implode('@', array_slice($em, 0, count($em) - 1));
- $len = floor(strlen($name) / 2);
+if (!function_exists('obfuscate_email')) {
+ /**
+ * Obfuscate email
+ *
+ * @param $email
+ * @return string
+ */
+ function obfuscate_email($email)
+ {
+ $em = explode('@', $email);
+ $name = implode('@', array_slice($em, 0, count($em) - 1));
+ $len = floor(strlen($name) / 2);
- return substr($name, 0, $len) . str_repeat('*', $len) . '@' . end($em);
-}
-
-/**
- * Get single value from settings table
- *
- * @param $setting
- * @return |null
- */
-function get_setting($setting)
-{
- return Setting::find($setting)->value ?? null;
-}
-
-/**
- * Get all app settings and return them as json
- */
-function get_settings_in_json()
-{
- return json_decode(
- Setting::all()
- ->pluck('value', 'name')
- ->toJson()
- );
-}
-
-/**
- * Check if setup wizard was passed
- *
- * @return string
- */
-function get_setup_status()
-{
- $setup_success = get_setting('setup_wizard_success');
-
- return boolval($setup_success) ? 'setup-done' : 'setup-disclaimer';
-}
-
-/**
- * Create paragraph from text
- *
- * @param $str
- * @return mixed|null|string|string[]
- */
-function add_paragraphs($str)
-{
- // Trim whitespace
- if (($str = trim($str)) === '') {
- return '';
+ return substr($name, 0, $len) . str_repeat('*', $len) . '@' . end($em);
}
-
- // Standardize newlines
- $str = str_replace(["\r\n", "\r"], "\n", $str);
-
- // Trim whitespace on each line
- $str = preg_replace('~^[ \t]+~m', '', $str);
- $str = preg_replace('~[ \t]+$~m', '', $str);
-
- // The following regexes only need to be executed if the string contains html
- if ($html_found = (strpos($str, '<') !== false)) {
- // Elements that should not be surrounded by p tags
- $no_p = '(?:p|div|article|header|aside|hgroup|canvas|output|progress|section|figcaption|audio|video|nav|figure|footer|video|details|main|menu|summary|h[1-6r]|ul|ol|li|blockquote|d[dlt]|pre|t[dhr]|t(?:able|body|foot|head)|c(?:aption|olgroup)|form|s(?:elect|tyle)|a(?:ddress|rea)|ma(?:p|th))';
-
- // Put at least two linebreaks before and after $no_p elements
- $str = preg_replace('~^<' . $no_p . '[^>]*+>~im', "\n$0", $str);
- $str = preg_replace('~' . $no_p . '\s*+>$~im', "$0\n", $str);
- }
-
- // Do the magic!
- $str = '
' . trim($str) . '
';
- $str = preg_replace('~\n{2,}~', "
\n\n", $str);
-
- // The following regexes only need to be executed if the string contains html
- if ($html_found !== false) {
- // Remove p tags around $no_p elements
- $str = preg_replace('~
(?=?' . $no_p . '[^>]*+>)~i', '', $str);
- $str = preg_replace('~(?' . $no_p . '[^>]*+>)
~i', '$1', $str);
- }
-
- // Convert single linebreaks to
- $str = preg_replace('~(?\n", $str);
-
- return $str;
}
-/**
- * Set environment value
- *
- * @param $key
- * @param $value
- * @return bool
- */
-function setEnvironmentValue(array $values)
-{
- $envFile = app()->environmentFilePath();
- $str = file_get_contents($envFile);
+if (!function_exists('get_setting')) {
+ /**
+ * Get single value from settings table
+ *
+ * @param $setting
+ * @return |null
+ */
+ function get_setting($setting)
+ {
+ return Setting::find($setting)->value ?? null;
+ }
+}
- if (count($values) > 0) {
- foreach ($values as $envKey => $envValue) {
- $str .= "\n"; // In case the searched variable is in the last line without \n
- $keyPosition = strpos($str, "{$envKey}=");
- $endOfLinePosition = strpos($str, "\n", $keyPosition);
- $oldLine = substr($str, $keyPosition, $endOfLinePosition - $keyPosition);
+if (!function_exists('get_settings_in_json')) {
+ /**
+ * Get all app settings and return them as json
+ */
+ function get_settings_in_json()
+ {
+ return json_decode(
+ Setting::all()
+ ->pluck('value', 'name')
+ ->toJson()
+ );
+ }
+}
- // If key does not exist, add it
- $str = str_replace($oldLine, "{$envKey}={$envValue}", $str);
+if (!function_exists('get_setup_status')) {
+ /**
+ * Check if setup wizard was passed
+ *
+ * @return string
+ */
+ function get_setup_status()
+ {
+ $setup_success = get_setting('setup_wizard_success');
+
+ return boolval($setup_success) ? 'setup-done' : 'setup-disclaimer';
+ }
+}
+
+if (!function_exists('add_paragraphs')) {
+ /**
+ * Create paragraph from text
+ *
+ * @param $str
+ * @return mixed|null|string|string[]
+ */
+ function add_paragraphs($str)
+ {
+ // Trim whitespace
+ if (($str = trim($str)) === '') {
+ return '';
+ }
+
+ // Standardize newlines
+ $str = str_replace(["\r\n", "\r"], "\n", $str);
+
+ // Trim whitespace on each line
+ $str = preg_replace('~^[ \t]+~m', '', $str);
+ $str = preg_replace('~[ \t]+$~m', '', $str);
+
+ // The following regexes only need to be executed if the string contains html
+ if ($html_found = (strpos($str, '<') !== false)) {
+ // Elements that should not be surrounded by p tags
+ $no_p = '(?:p|div|article|header|aside|hgroup|canvas|output|progress|section|figcaption|audio|video|nav|figure|footer|video|details|main|menu|summary|h[1-6r]|ul|ol|li|blockquote|d[dlt]|pre|t[dhr]|t(?:able|body|foot|head)|c(?:aption|olgroup)|form|s(?:elect|tyle)|a(?:ddress|rea)|ma(?:p|th))';
+
+ // Put at least two linebreaks before and after $no_p elements
+ $str = preg_replace('~^<' . $no_p . '[^>]*+>~im', "\n$0", $str);
+ $str = preg_replace('~' . $no_p . '\s*+>$~im', "$0\n", $str);
+ }
+
+ // Do the magic!
+ $str = '
' . trim($str) . '
';
+ $str = preg_replace('~\n{2,}~', "\n\n", $str);
+
+ // The following regexes only need to be executed if the string contains html
+ if ($html_found !== false) {
+ // Remove p tags around $no_p elements
+ $str = preg_replace('~
(?=?' . $no_p . '[^>]*+>)~i', '', $str);
+ $str = preg_replace('~(?' . $no_p . '[^>]*+>)
~i', '$1', $str);
+ }
+
+ // Convert single linebreaks to
+ $str = preg_replace('~(?\n", $str);
+
+ return $str;
+ }
+}
+
+if (!function_exists('setEnvironmentValue')) {
+ /**
+ * Set environment value
+ *
+ * @param $key
+ * @param $value
+ * @return bool
+ */
+ function setEnvironmentValue(array $values)
+ {
+ $envFile = app()->environmentFilePath();
+ $str = file_get_contents($envFile);
+
+ if (count($values) > 0) {
+ foreach ($values as $envKey => $envValue) {
+ $str .= "\n"; // In case the searched variable is in the last line without \n
+ $keyPosition = strpos($str, "{$envKey}=");
+ $endOfLinePosition = strpos($str, "\n", $keyPosition);
+ $oldLine = substr($str, $keyPosition, $endOfLinePosition - $keyPosition);
+
+ // If key does not exist, add it
+ $str = str_replace($oldLine, "{$envKey}={$envValue}", $str);
+ }
+ }
+
+ $str = substr($str, 0, -1);
+
+ return !(!file_put_contents($envFile, $str));
+ }
+}
+
+if (!function_exists('get_invoice_number')) {
+ /**
+ * Get invoice number
+ *
+ * @return string
+ */
+ function get_invoice_number()
+ {
+ $invoices = \App\Invoice::all();
+
+ if ($invoices->isEmpty()) {
+ return now()->year . '001';
+ }
+
+ return (int)$invoices->last()->order + 1;
+ }
+}
+
+if (!function_exists('cache_forget_many')) {
+ /**
+ * Forget many cache keys at once
+ * @param $cache
+ */
+ function cache_forget_many($cache)
+ {
+ foreach ($cache as $item) {
+ \Illuminate\Support\Facades\Cache::forget($item);
}
}
-
- $str = substr($str, 0, -1);
-
- return ! (! file_put_contents($envFile, $str))
- ;
}
-/**
- * Get invoice number
- *
- * @return string
- */
-function get_invoice_number()
-{
- $invoices = \App\Invoice::all();
-
- if ($invoices->isEmpty()) {
- return now()->year . '001';
- }
-
- return (int) $invoices->last()->order + 1;
-}
-
-/**
- * Forget many cache keys at once
- * @param $cache
- */
-function cache_forget_many($cache)
-{
- foreach ($cache as $item) {
- \Illuminate\Support\Facades\Cache::forget($item);
+if (!function_exists('get_storage')) {
+ /**
+ * Get app version from config
+ *
+ * @return \Illuminate\Config\Repository|mixed
+ */
+ function get_storage()
+ {
+ return env('FILESYSTEM_DRIVER');
}
}
-/**
- * Get app version from config
- *
- * @return \Illuminate\Config\Repository|mixed
- */
-function get_storage()
-{
- return env('FILESYSTEM_DRIVER');
-}
-
-/**
- * Check if is running AWS s3 as storage
- *
- * @return bool
- */
-function is_storage_driver($driver)
-{
- if (is_array($driver)) {
- return in_array(config('filesystems.default'), $driver);
- }
-
- return config('filesystems.default') === $driver;
-}
-
-/**
- * Get app version from config
- *
- * @return \Illuminate\Config\Repository|mixed
- */
-function get_version()
-{
- return config('vuefilemanager.version');
-}
-
-/**
- * Check if is demo
- *
- * @return bool
- */
-function is_demo()
-{
- return config('vuefilemanager.is_demo');
-}
-
-/**
- * Check if is demo
- *
- * @param $email
- * @return mixed
- */
-function is_demo_account($email)
-{
- return config('vuefilemanager.is_demo') && $email === 'howdy@hi5ve.digital';
-}
-
-/**
- * Get folder or file item
- *
- * @param $type
- * @param $id
- * @return \Illuminate\Database\Eloquent\Builder|Model
- */
-function get_item($type, $id)
-{
- $model = strtolower($type) === 'folder' ? 'Folder' : 'File';
-
- return ("App\\Models\\$model")::find($id);
-}
-
-/**
- * Get shared token
- *
- * @param $token
- * @return \Illuminate\Database\Eloquent\Builder|Model
- */
-function get_shared($token)
-{
- return Share::whereToken($token)
- ->firstOrFail();
-}
-
-/**
- * Check if shared permission is editor
- *
- * @param $shared
- * @return bool
- */
-function is_editor($shared)
-{
- return $shared->permission === 'editor';
-}
-
-/**
- * Check if shared permission is visitor
- *
- * @param $shared
- * @return bool
- */
-function is_visitor($shared)
-{
- return $shared->permission === 'visitor';
-}
-
-/**
- * Store user avatar to storage
- *
- * @param $request
- * @param $name
- * @return string|null
- */
-function store_avatar($request, $name)
-{
- if (! $request->hasFile($name)) {
- return null;
- }
-
- $image = $request->file($name);
-
- // Store avatar
- $image_path = Str::random(16) . '-' . $image->getClientOriginalName();
-
- if (in_array($image->getClientMimeType(), ['image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/webp'])) {
- // Create intervention image
- $img = Image::make($image->getRealPath());
-
- // Generate thumbnail
- $img->fit('150', '150')->stream();
-
- // Store thumbnail to disk
- Storage::put("avatars/$image_path", $img);
- }
-
- if ($image->getClientMimeType() === 'image/svg+xml') {
- Storage::putFileAs('avatars', $image, $image_path);
- }
-
- // Return path to image
- return "avatars/$image_path";
-}
-
-/**
- * Store system image
- *
- * @param $request
- * @param $name
- * @return string|null
- */
-function store_system_image($request, $name)
-{
- if (! $request->hasFile($name)) {
- return null;
- }
-
- $image = $request->file($name);
-
- // Store avatar
- $filename = Str::random(8) . '-' . str_replace(' ', '', $image->getClientOriginalName());
-
- // Store image to disk
- Storage::putFileAs('system', $image, $filename);
-
- // Return path to image
- return "system/$filename";
-}
-
-/**
- * Make input from request
- *
- * @param $request
- * @return array
- */
-function make_single_input($request)
-{
- // Create container
- $data = [];
-
- // Add data to array
- $data[$request->name] = $request->value;
-
- // Return input
- return $data;
-}
-
-/**
- * Format integer to gigabytes
- *
- * @param $gigabytes
- * @return string
- */
-function format_gigabytes($gigabytes)
-{
- if ($gigabytes >= 1000) {
- return Metric::gigabytes($gigabytes)->format('Tb/');
- }
-
- return Metric::gigabytes($gigabytes)->format('GB/');
-}
-
-/**
- * Format string to formated megabytes string
- *
- * @param $megabytes
- * @return string
- */
-function format_megabytes($megabytes)
-{
- if ($megabytes >= 1000) {
- return $megabytes / 1000 . 'GB';
- }
-
- if ($megabytes >= 1000000) {
- return $megabytes / 1000000 . 'TB';
- }
-
- return $megabytes . 'MB';
-}
-
-/**
- * Convert megabytes to bytes
- *
- * @param $megabytes
- * @return int|string
- */
-function format_bytes($megabytes)
-{
- return Metric::megabytes($megabytes)->numberOfBytes();
-}
-
-/**
- * Get storage usage in percent
- *
- * @param $used
- * @param $capacity
- * @return string
- */
-function get_storage_fill_percentage($used, $capacity)
-{
- // Format gigabytes to bytes
- $total = intval(Metric::gigabytes($capacity)->numberOfBytes());
-
- // Count progress
- if ($total == 0) {
- $progress = 100;
- } else {
- $progress = ($used * 100) / $total;
- }
-
- // Return in 2 decimal
- return number_format((float) $progress, 2, '.', '');
-}
-
-/**
- * Get user capacity fill by percentage
- *
- * @param $id
- * @param null $additionals
- * @return string
- */
-function user_storage_percentage($id, $additionals = null)
-{
- $user = User::findOrFail($id);
-
- $used = $user->used_capacity;
-
- if ($additionals) {
- $used = $user->used_capacity + $additionals;
- }
-
- return get_storage_fill_percentage($used, $user->settings->storage_capacity);
-}
-
-/**
- * Find all key values in recursive array
- *
- * @param array $array
- * @param $needle
- * @return array
- */
-function recursiveFind(array $array, $needle)
-{
- $iterator = new RecursiveArrayIterator($array);
- $recursive = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
- $aHitList = [];
-
- foreach ($recursive as $key => $value) {
- if ($key === $needle) {
- array_push($aHitList, $value);
+if (!function_exists('is_storage_driver')) {
+ /**
+ * Check if is running AWS s3 as storage
+ *
+ * @return bool
+ */
+ function is_storage_driver($driver)
+ {
+ if (is_array($driver)) {
+ return in_array(config('filesystems.default'), $driver);
}
+
+ return config('filesystems.default') === $driver;
}
-
- return $aHitList;
}
-/**
- * Get values which appears only once in array
- * @param $arr
- * @return array
- */
-function appeared_once($arr)
-{
- $array_count_values = array_count_values($arr);
-
- $single_time_comming_values_array = [];
-
- foreach ($array_count_values as $key => $val) {
- if ($val == 1) {
- $single_time_comming_values_array[] = $key;
- }
+if (!function_exists('get_version')) {
+ /**
+ * Get app version from config
+ *
+ * @return \Illuminate\Config\Repository|mixed
+ */
+ function get_version()
+ {
+ return config('vuefilemanager.version');
}
-
- return $single_time_comming_values_array;
}
-/**
- * @param $folders
- * @param string $by_column
- * @return array
- */
-function filter_folders_ids($folders, $by_column = 'id')
-{
- $folder_ids = recursiveFind($folders->toArray(), $by_column);
-
- return appeared_once($folder_ids);
-}
-
-/**
- * Format localized date
- *
- * @param $date
- * @param string $format
- * @return string
- */
-function format_date($date, $format = '%d. %B. %Y, %H:%M')
-{
- $start = Carbon::parse($date);
-
- return $start->formatLocalized($format);
-}
-
-/**
- * Get file type from mimetype
- *
- * @param $file_mimetype
- * @return string
- */
-function get_file_type($file_mimetype)
-{
- // Get mimetype from file
- $mimetype = explode('/', $file_mimetype);
-
- if (in_array($mimetype[0], ['image', 'video', 'audio'])) {
- return $mimetype[0];
+if (!function_exists('is_demo')) {
+ /**
+ * Check if is demo
+ *
+ * @return bool
+ */
+ function is_demo()
+ {
+ return config('vuefilemanager.is_demo');
}
-
- return 'file';
}
-/**
- * It map language translations as language key and language value
- *
- * @param $translations
- * @return mixed
- */
-function map_language_translations($translations): Collection
-{
- return $translations->map(function ($string) {
- return [$string->key => $string->value];
- })->collapse();
-}
-
-/**
- * Get file type from mimetype
- *
- * @param $mimetype
- * @return mixed
- */
-function get_file_type_from_mimetype($mimetype)
-{
- return explode('/', $mimetype)[1];
-}
-
-/**
- * Format pretty name file
- *
- * @param $basename
- * @param $name
- * @param $mimetype
- * @return string
- */
-function get_pretty_name($basename, $name, $mimetype)
-{
- $file_extension = substr(strrchr($basename, '.'), 1);
-
- if (strpos($name, $file_extension) !== false) {
- return $name;
+if (!function_exists('is_demo_account')) {
+ /**
+ * Check if is demo
+ *
+ * @param $email
+ * @return mixed
+ */
+ function is_demo_account($email)
+ {
+ return config('vuefilemanager.is_demo') && $email === 'howdy@hi5ve.digital';
}
-
- if ($file_extension) {
- return $name . '.' . $file_extension;
- }
-
- return $name . '.' . $mimetype;
}
-/**
- * Get exif data from jpeg image
- *
- * @param $file
- * @return array|null
- */
-function get_image_meta_data($file)
-{
- if (get_file_type_from_mimetype($file->getMimeType()) === 'jpeg') {
- try {
- // Try to get the exif data
- return mb_convert_encoding(Image::make($file->getRealPath())->exif(), 'UTF8', 'UTF8');
- } catch (\Exception $e) {
+if (!function_exists('get_item')) {
+ /**
+ * Get folder or file item
+ *
+ * @param $type
+ * @param $id
+ * @return \Illuminate\Database\Eloquent\Builder|Model
+ */
+ function get_item($type, $id)
+ {
+ $model = strtolower($type) === 'folder' ? 'Folder' : 'File';
+
+ return ("App\\Models\\$model")::find($id);
+ }
+}
+
+if (!function_exists('get_shared')) {
+ /**
+ * Get shared token
+ *
+ * @param $token
+ * @return \Illuminate\Database\Eloquent\Builder|Model
+ */
+ function get_shared($token)
+ {
+ return Share::whereToken($token)
+ ->firstOrFail();
+ }
+}
+
+if (!function_exists('is_editor')) {
+ /**
+ * Check if shared permission is editor
+ *
+ * @param $shared
+ * @return bool
+ */
+ function is_editor($shared)
+ {
+ return $shared->permission === 'editor';
+ }
+}
+
+if (!function_exists('is_visitor')) {
+ /**
+ * Check if shared permission is visitor
+ *
+ * @param $shared
+ * @return bool
+ */
+ function is_visitor($shared)
+ {
+ return $shared->permission === 'visitor';
+ }
+}
+
+if (!function_exists('store_avatar')) {
+ /**
+ * Store user avatar to storage
+ *
+ * @param $request
+ * @param $name
+ * @return string|null
+ */
+ function store_avatar($request, $name)
+ {
+ if (!$request->hasFile($name)) {
return null;
}
+
+ $image = $request->file($name);
+
+ // Store avatar
+ $image_path = Str::random(16) . '-' . $image->getClientOriginalName();
+
+ if (in_array($image->getClientMimeType(), ['image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/webp'])) {
+ // Create intervention image
+ $img = Image::make($image->getRealPath());
+
+ // Generate thumbnail
+ $img->fit('150', '150')->stream();
+
+ // Store thumbnail to disk
+ Storage::put("avatars/$image_path", $img);
+ }
+
+ if ($image->getClientMimeType() === 'image/svg+xml') {
+ Storage::putFileAs('avatars', $image, $image_path);
+ }
+
+ // Return path to image
+ return "avatars/$image_path";
}
}
-/**
- * @return Collection
- */
-function get_default_language_translations(): Collection
-{
- return collect([
- config('language-translations.extended'),
- config('language-translations.regular'),
- config('custom-language-translations'),
- ])->collapse();
+if (!function_exists('store_system_image')) {
+ /**
+ * Store system image
+ *
+ * @param $request
+ * @param $name
+ * @return string|null
+ */
+ function store_system_image($request, $name)
+ {
+ if (!$request->hasFile($name)) {
+ return null;
+ }
+
+ $image = $request->file($name);
+
+ // Store avatar
+ $filename = Str::random(8) . '-' . str_replace(' ', '', $image->getClientOriginalName());
+
+ // Store image to disk
+ Storage::putFileAs('system', $image, $filename);
+
+ // Return path to image
+ return "system/$filename";
+ }
}
-/**
- * Check if app is in dev mode
- *
- * @return bool
- */
-function is_dev()
-{
- return env('APP_ENV') === 'local';
+if (!function_exists('make_single_input')) {
+ /**
+ * Make input from request
+ *
+ * @param $request
+ * @return array
+ */
+ function make_single_input($request)
+ {
+ // Create container
+ $data = [];
+
+ // Add data to array
+ $data[$request->name] = $request->value;
+
+ // Return input
+ return $data;
+ }
}
-/**
- * @param $str
- * @return bool
- */
-function seems_utf8($str)
-{
- $length = strlen($str);
+if (!function_exists('format_gigabytes')) {
+ /**
+ * Format integer to gigabytes
+ *
+ * @param $gigabytes
+ * @return string
+ */
+ function format_gigabytes($gigabytes)
+ {
+ if ($gigabytes >= 1000) {
+ return Metric::gigabytes($gigabytes)->format('Tb/');
+ }
- for ($i = 0; $i < $length; $i++) {
- $c = ord($str[$i]);
+ return Metric::gigabytes($gigabytes)->format('GB/');
+ }
+}
- if ($c < 0x80) {
- $n = 0;
- } # 0bbbbbbb
- elseif (($c & 0xE0) == 0xC0) {
- $n = 1;
- } # 110bbbbb
- elseif (($c & 0xF0) == 0xE0) {
- $n = 2;
- } # 1110bbbb
- elseif (($c & 0xF8) == 0xF0) {
- $n = 3;
- } # 11110bbb
- elseif (($c & 0xFC) == 0xF8) {
- $n = 4;
- } # 111110bb
- elseif (($c & 0xFE) == 0xFC) {
- $n = 5;
- } # 1111110b
- else {
- return false;
- } # Does not match any model
+if (!function_exists('format_megabytes')) {
+ /**
+ * Format string to formated megabytes string
+ *
+ * @param $megabytes
+ * @return string
+ */
+ function format_megabytes($megabytes)
+ {
+ if ($megabytes >= 1000) {
+ return $megabytes / 1000 . 'GB';
+ }
- for ($j = 0; $j < $n; $j++) { # n bytes matching 10bbbbbb follow ?
- if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) {
- return false;
+ if ($megabytes >= 1000000) {
+ return $megabytes / 1000000 . 'TB';
+ }
+
+ return $megabytes . 'MB';
+ }
+}
+
+if (!function_exists('format_bytes')) {
+ /**
+ * Convert megabytes to bytes
+ *
+ * @param $megabytes
+ * @return int|string
+ */
+ function format_bytes($megabytes)
+ {
+ return Metric::megabytes($megabytes)->numberOfBytes();
+ }
+}
+
+if (!function_exists('get_storage_fill_percentage')) {
+ /**
+ * Get storage usage in percent
+ *
+ * @param $used
+ * @param $capacity
+ * @return string
+ */
+ function get_storage_fill_percentage($used, $capacity)
+ {
+ // Format gigabytes to bytes
+ $total = intval(Metric::gigabytes($capacity)->numberOfBytes());
+
+ // Count progress
+ if ($total == 0) {
+ $progress = 100;
+ } else {
+ $progress = ($used * 100) / $total;
+ }
+
+ // Return in 2 decimal
+ return number_format((float)$progress, 2, '.', '');
+ }
+}
+
+if (!function_exists('user_storage_percentage')) {
+ /**
+ * Get user capacity fill by percentage
+ *
+ * @param $id
+ * @param null $additionals
+ * @return string
+ */
+ function user_storage_percentage($id, $additionals = null)
+ {
+ $user = User::findOrFail($id);
+
+ $used = $user->used_capacity;
+
+ if ($additionals) {
+ $used = $user->used_capacity + $additionals;
+ }
+
+ return get_storage_fill_percentage($used, $user->settings->storage_capacity);
+ }
+}
+
+if (!function_exists('recursiveFind')) {
+ /**
+ * Find all key values in recursive array
+ *
+ * @param array $array
+ * @param $needle
+ * @return array
+ */
+ function recursiveFind(array $array, $needle)
+ {
+ $iterator = new RecursiveArrayIterator($array);
+ $recursive = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
+ $aHitList = [];
+
+ foreach ($recursive as $key => $value) {
+ if ($key === $needle) {
+ array_push($aHitList, $value);
+ }
+ }
+
+ return $aHitList;
+ }
+}
+
+if (!function_exists('appeared_once')) {
+ /**
+ * Get values which appears only once in array
+ * @param $arr
+ * @return array
+ */
+ function appeared_once($arr)
+ {
+ $array_count_values = array_count_values($arr);
+
+ $single_time_comming_values_array = [];
+
+ foreach ($array_count_values as $key => $val) {
+ if ($val == 1) {
+ $single_time_comming_values_array[] = $key;
+ }
+ }
+
+ return $single_time_comming_values_array;
+ }
+}
+
+if (!function_exists('filter_folders_ids')) {
+ /**
+ * @param $folders
+ * @param string $by_column
+ * @return array
+ */
+ function filter_folders_ids($folders, $by_column = 'id')
+ {
+ $folder_ids = recursiveFind($folders->toArray(), $by_column);
+
+ return appeared_once($folder_ids);
+ }
+}
+
+if (!function_exists('format_date')) {
+ /**
+ * Format localized date
+ *
+ * @param $date
+ * @param string $format
+ * @return string
+ */
+ function format_date($date, $format = '%d. %B. %Y, %H:%M')
+ {
+ $start = Carbon::parse($date);
+
+ return $start->formatLocalized($format);
+ }
+}
+
+if (!function_exists('get_file_type')) {
+ /**
+ * Get file type from mimetype
+ *
+ * @param $file_mimetype
+ * @return string
+ */
+ function get_file_type($file_mimetype)
+ {
+ // Get mimetype from file
+ $mimetype = explode('/', $file_mimetype);
+
+ if (in_array($mimetype[0], ['image', 'video', 'audio'])) {
+ return $mimetype[0];
+ }
+
+ return 'file';
+ }
+}
+
+if (!function_exists('map_language_translations')) {
+ /**
+ * It map language translations as language key and language value
+ *
+ * @param $translations
+ * @return mixed
+ */
+ function map_language_translations($translations): Collection
+ {
+ return $translations->map(function ($string) {
+ return [$string->key => $string->value];
+ })->collapse();
+ }
+}
+
+if (!function_exists('get_file_type_from_mimetype')) {
+ /**
+ * Get file type from mimetype
+ *
+ * @param $mimetype
+ * @return mixed
+ */
+ function get_file_type_from_mimetype($mimetype)
+ {
+ return explode('/', $mimetype)[1];
+ }
+}
+
+if (!function_exists('get_pretty_name')) {
+ /**
+ * Format pretty name file
+ *
+ * @param $basename
+ * @param $name
+ * @param $mimetype
+ * @return string
+ */
+ function get_pretty_name($basename, $name, $mimetype)
+ {
+ $file_extension = substr(strrchr($basename, '.'), 1);
+
+ if (strpos($name, $file_extension) !== false) {
+ return $name;
+ }
+
+ if ($file_extension) {
+ return $name . '.' . $file_extension;
+ }
+
+ return $name . '.' . $mimetype;
+ }
+}
+
+if (!function_exists('get_image_meta_data')) {
+ /**
+ * Get exif data from jpeg image
+ *
+ * @param $file
+ * @return array|null
+ */
+ function get_image_meta_data($file)
+ {
+ if (get_file_type_from_mimetype($file->getMimeType()) === 'jpeg') {
+ try {
+ // Try to get the exif data
+ return mb_convert_encoding(Image::make($file->getRealPath())->exif(), 'UTF8', 'UTF8');
+ } catch (\Exception $e) {
+ return null;
}
}
}
-
- return true;
}
-/**
- * Converts all accent characters to ASCII characters.
- *
- * If there are no accent characters, then the string given is just returned.
- *
- * @param string $string Text that might have accent characters
- * @return string Filtered string with replaced "nice" characters.
- */
-function remove_accents($string)
-{
- if (! preg_match('/[\x80-\xff]/', $string)) {
+if (!function_exists('get_default_language_translations')) {
+ /**
+ * @return Collection
+ */
+ function get_default_language_translations(): Collection
+ {
+ return collect([
+ config('language-translations.extended'),
+ config('language-translations.regular'),
+ config('custom-language-translations'),
+ ])->collapse();
+ }
+}
+
+if (!function_exists('is_dev')) {
+ /**
+ * Check if app is in dev mode
+ *
+ * @return bool
+ */
+ function is_dev()
+ {
+ return env('APP_ENV') === 'local';
+ }
+}
+
+if (!function_exists('seems_utf8')) {
+ /**
+ * @param $str
+ * @return bool
+ */
+ function seems_utf8($str)
+ {
+ $length = strlen($str);
+
+ for ($i = 0; $i < $length; $i++) {
+ $c = ord($str[$i]);
+
+ if ($c < 0x80) {
+ $n = 0;
+ } # 0bbbbbbb
+ elseif (($c & 0xE0) == 0xC0) {
+ $n = 1;
+ } # 110bbbbb
+ elseif (($c & 0xF0) == 0xE0) {
+ $n = 2;
+ } # 1110bbbb
+ elseif (($c & 0xF8) == 0xF0) {
+ $n = 3;
+ } # 11110bbb
+ elseif (($c & 0xFC) == 0xF8) {
+ $n = 4;
+ } # 111110bb
+ elseif (($c & 0xFE) == 0xFC) {
+ $n = 5;
+ } # 1111110b
+ else {
+ return false;
+ } # Does not match any model
+
+ for ($j = 0; $j < $n; $j++) { # n bytes matching 10bbbbbb follow ?
+ if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+}
+
+if (!function_exists('remove_accents')) {
+ /**
+ * Converts all accent characters to ASCII characters.
+ *
+ * If there are no accent characters, then the string given is just returned.
+ *
+ * @param string $string Text that might have accent characters
+ * @return string Filtered string with replaced "nice" characters.
+ */
+ function remove_accents($string)
+ {
+ if (!preg_match('/[\x80-\xff]/', $string)) {
+ return $string;
+ }
+
+ if (seems_utf8($string)) {
+ $chars = [
+ // Decompositions for Latin-1 Supplement
+ chr(195) . chr(128) => 'A', chr(195) . chr(129) => 'A',
+ chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A',
+ chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A',
+ chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E',
+ chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E',
+ chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I',
+ chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I',
+ chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N',
+ chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O',
+ chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O',
+ chr(195) . chr(150) => 'O', chr(195) . chr(153) => 'U',
+ chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U',
+ chr(195) . chr(156) => 'U', chr(195) . chr(157) => 'Y',
+ chr(195) . chr(159) => 's', chr(195) . chr(160) => 'a',
+ chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a',
+ chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'a',
+ chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c',
+ chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e',
+ chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e',
+ chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i',
+ chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i',
+ chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o',
+ chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o',
+ chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'o',
+ chr(195) . chr(182) => 'o', chr(195) . chr(185) => 'u',
+ chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u',
+ chr(195) . chr(188) => 'u', chr(195) . chr(189) => 'y',
+ chr(195) . chr(191) => 'y',
+ // Decompositions for Latin Extended-A
+ chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a',
+ chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a',
+ chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a',
+ chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c',
+ chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c',
+ chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c',
+ chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c',
+ chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd',
+ chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd',
+ chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e',
+ chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e',
+ chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e',
+ chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e',
+ chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e',
+ chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g',
+ chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g',
+ chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g',
+ chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g',
+ chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h',
+ chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h',
+ chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i',
+ chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i',
+ chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i',
+ chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i',
+ chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i',
+ chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij',
+ chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j',
+ chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k',
+ chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L',
+ chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L',
+ chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L',
+ chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L',
+ chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L',
+ chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N',
+ chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N',
+ chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N',
+ chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N',
+ chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N',
+ chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o',
+ chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o',
+ chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o',
+ chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe',
+ chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r',
+ chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r',
+ chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r',
+ chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's',
+ chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's',
+ chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's',
+ chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's',
+ chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't',
+ chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't',
+ chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't',
+ chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u',
+ chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u',
+ chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u',
+ chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u',
+ chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u',
+ chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u',
+ chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w',
+ chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y',
+ chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z',
+ chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z',
+ chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z',
+ chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's',
+ // Euro Sign
+ chr(226) . chr(130) . chr(172) => 'E',
+ // GBP (Pound) Sign
+ chr(194) . chr(163) => '',];
+
+ $string = strtr($string, $chars);
+ } else {
+ // Assume ISO-8859-1 if not UTF-8
+ $chars['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158)
+ . chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194)
+ . chr(195) . chr(196) . chr(197) . chr(199) . chr(200) . chr(201) . chr(202)
+ . chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210)
+ . chr(211) . chr(212) . chr(213) . chr(214) . chr(216) . chr(217) . chr(218)
+ . chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227)
+ . chr(228) . chr(229) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235)
+ . chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243)
+ . chr(244) . chr(245) . chr(246) . chr(248) . chr(249) . chr(250) . chr(251)
+ . chr(252) . chr(253) . chr(255);
+
+ $chars['out'] = 'EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy';
+
+ $string = strtr($string, $chars['in'], $chars['out']);
+ $double_chars['in'] = [chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)];
+ $double_chars['out'] = ['OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'];
+ $string = str_replace($double_chars['in'], $double_chars['out'], $string);
+ }
+
return $string;
}
-
- if (seems_utf8($string)) {
- $chars = [
- // Decompositions for Latin-1 Supplement
- chr(195) . chr(128) => 'A', chr(195) . chr(129) => 'A',
- chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A',
- chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A',
- chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E',
- chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E',
- chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I',
- chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I',
- chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N',
- chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O',
- chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O',
- chr(195) . chr(150) => 'O', chr(195) . chr(153) => 'U',
- chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U',
- chr(195) . chr(156) => 'U', chr(195) . chr(157) => 'Y',
- chr(195) . chr(159) => 's', chr(195) . chr(160) => 'a',
- chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a',
- chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'a',
- chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c',
- chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e',
- chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e',
- chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i',
- chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i',
- chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o',
- chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o',
- chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'o',
- chr(195) . chr(182) => 'o', chr(195) . chr(185) => 'u',
- chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u',
- chr(195) . chr(188) => 'u', chr(195) . chr(189) => 'y',
- chr(195) . chr(191) => 'y',
- // Decompositions for Latin Extended-A
- chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a',
- chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a',
- chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a',
- chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c',
- chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c',
- chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c',
- chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c',
- chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd',
- chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd',
- chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e',
- chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e',
- chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e',
- chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e',
- chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e',
- chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g',
- chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g',
- chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g',
- chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g',
- chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h',
- chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h',
- chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i',
- chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i',
- chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i',
- chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i',
- chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i',
- chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij',
- chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j',
- chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k',
- chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L',
- chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L',
- chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L',
- chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L',
- chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L',
- chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N',
- chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N',
- chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N',
- chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N',
- chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N',
- chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o',
- chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o',
- chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o',
- chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe',
- chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r',
- chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r',
- chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r',
- chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's',
- chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's',
- chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's',
- chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's',
- chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't',
- chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't',
- chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't',
- chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u',
- chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u',
- chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u',
- chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u',
- chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u',
- chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u',
- chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w',
- chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y',
- chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z',
- chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z',
- chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z',
- chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's',
- // Euro Sign
- chr(226) . chr(130) . chr(172) => 'E',
- // GBP (Pound) Sign
- chr(194) . chr(163) => '', ];
-
- $string = strtr($string, $chars);
- } else {
- // Assume ISO-8859-1 if not UTF-8
- $chars['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158)
- . chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194)
- . chr(195) . chr(196) . chr(197) . chr(199) . chr(200) . chr(201) . chr(202)
- . chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210)
- . chr(211) . chr(212) . chr(213) . chr(214) . chr(216) . chr(217) . chr(218)
- . chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227)
- . chr(228) . chr(229) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235)
- . chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243)
- . chr(244) . chr(245) . chr(246) . chr(248) . chr(249) . chr(250) . chr(251)
- . chr(252) . chr(253) . chr(255);
-
- $chars['out'] = 'EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy';
-
- $string = strtr($string, $chars['in'], $chars['out']);
- $double_chars['in'] = [chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)];
- $double_chars['out'] = ['OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'];
- $string = str_replace($double_chars['in'], $double_chars['out'], $string);
- }
-
- return $string;
}
-/**
- * Get all files from folder and get their folder location in VueFileManager directories
- *
- * @param $folders
- * @param null $files
- * @param array $path
- * @return array
- */
-function get_files_for_zip($folders, $files, $path = [])
-{
- // Return file list
- if (! isset($folders->folders)) {
- return $files->unique()->values()->all();
- }
+if (!function_exists('get_files_for_zip')) {
- // Push file path
- array_push($path, $folders->name);
+ /**
+ * Get all files from folder and get their folder location in VueFileManager directories
+ *
+ * @param $folders
+ * @param null $files
+ * @param array $path
+ * @return array
+ */
+ function get_files_for_zip($folders, $files, $path = [])
+ {
+ // Return file list
+ if (!isset($folders->folders)) {
+ return $files->unique()->values()->all();
+ }
- // Push file to collection
- $folders->files->each(function ($file) use ($files, $path) {
- $files->push([
- 'name' => $file->name,
- 'basename' => $file->basename,
- 'mimetype' => $file->mimetype,
- 'folder_path' => implode('/', $path),
- ]);
- });
+ // Push file path
+ array_push($path, $folders->name);
- // Get all children folders and folders within
- if ($folders->folders->isNotEmpty()) {
- $folders->folders->map(function ($folder) use ($files, $path) {
- return get_files_for_zip($folder, $files, $path);
+ // Push file to collection
+ $folders->files->each(function ($file) use ($files, $path) {
+ $files->push([
+ 'name' => $file->name,
+ 'basename' => $file->basename,
+ 'mimetype' => $file->mimetype,
+ 'folder_path' => implode('/', $path),
+ ]);
});
- }
- return get_files_for_zip($folders->folders->first(), $files, $path);
-}
-
-/**
- * Set time by user timezone GMT
- *
- * @param $time
- * @return Carbon
- */
-function set_time_by_user_timezone($time)
-{
- $user = Auth::user();
-
- if ($user) {
- $time_zone = intval($user->settings->timezone * 60 ?? null);
-
- return Carbon::parse($time)->addMinutes($time_zone ?? 0);
- }
-
- return Carbon::parse($time);
-}
-
-/**
- * Translate the given message.
- * @param $key
- * @param null $values
- * @return string
- * @throws Exception
- */
-function __t($key, $values = null): string
-{
- // Get current locale
- $locale = cache()->rememberForever('language', function () {
- try {
- return get_setting('language') ?? 'en';
- } catch (QueryException $e) {
- return 'en';
+ // Get all children folders and folders within
+ if ($folders->folders->isNotEmpty()) {
+ $folders->folders->map(function ($folder) use ($files, $path) {
+ return get_files_for_zip($folder, $files, $path);
+ });
}
- });
- // Get language strings
- $strings = cache()->rememberForever("language-translations-$locale", function () use ($locale) {
- try {
- return Language::whereLocale($locale)->firstOrFail()->languageTranslations;
- } catch (QueryException | ModelNotFoundException $e) {
- return null;
- }
- }) ?? get_default_language_translations();
-
- // Find the string by key
- $string = $strings->firstWhere('key', $key)->value ?? $strings->get($key);
-
- if ($values) {
- return replace_occurrence($string, collect($values));
+ return get_files_for_zip($folders->folders->first(), $files, $path);
}
-
- return $string;
}
-/**
- * Replace string occurrence in __t() by their values
- *
- * @param $string
- * @param $values
- * @return string|string[]
- */
-function replace_occurrence($string, $values)
-{
- $occurrences = $values->map(function ($message, $key) {
- return [
- 'key' => ":$key",
- 'message' => $message,
- ];
- });
+if (!function_exists('set_time_by_user_timezone')) {
+ /**
+ * Set time by user timezone GMT
+ *
+ * @param $time
+ * @return Carbon
+ */
+ function set_time_by_user_timezone($time)
+ {
+ $user = Auth::user();
- return str_ireplace(
- $occurrences->pluck('key')->toArray(),
- $occurrences->pluck('message')->toArray(),
- $string
- );
+ if ($user) {
+ $time_zone = intval($user->settings->timezone * 60 ?? null);
+
+ return Carbon::parse($time)->addMinutes($time_zone ?? 0);
+ }
+
+ return Carbon::parse($time);
+ }
+}
+
+if (!function_exists('__t')) {
+ /**
+ * Translate the given message.
+ * @param $key
+ * @param null $values
+ * @return string
+ * @throws Exception
+ */
+ function __t($key, $values = null): string
+ {
+ // Get current locale
+ $locale = cache()->rememberForever('language', function () {
+ try {
+ return get_setting('language') ?? 'en';
+ } catch (QueryException $e) {
+ return 'en';
+ }
+ });
+
+ // Get language strings
+ $strings = cache()->rememberForever("language-translations-$locale", function () use ($locale) {
+ try {
+ return Language::whereLocale($locale)->firstOrFail()->languageTranslations;
+ } catch (QueryException | ModelNotFoundException $e) {
+ return null;
+ }
+ }) ?? get_default_language_translations();
+
+ // Find the string by key
+ $string = $strings->firstWhere('key', $key)->value ?? $strings->get($key);
+
+ if ($values) {
+ return replace_occurrence($string, collect($values));
+ }
+
+ return $string;
+ }
+}
+
+if (!function_exists('replace_occurrence')) {
+ /**
+ * Replace string occurrence in __t() by their values
+ *
+ * @param $string
+ * @param $values
+ * @return string|string[]
+ */
+ function replace_occurrence($string, $values)
+ {
+ $occurrences = $values->map(function ($message, $key) {
+ return [
+ 'key' => ":$key",
+ 'message' => $message,
+ ];
+ });
+
+ return str_ireplace(
+ $occurrences->pluck('key')->toArray(),
+ $occurrences->pluck('message')->toArray(),
+ $string
+ );
+ }
}