$length) { $str = substr($str, 0, $length); // $str = substr($str, 0, strrpos($str, " ")); $str = $str.' ...'; } return $str; } public static function reFormatNumber($value) { // Wenn bereits ein Float/Int, direkt zurückgeben if (is_numeric($value) && ! is_string($value)) { return (float) $value; } $value = (string) $value; // Entferne alle nicht-numerischen Zeichen außer Punkt, Komma und Minus $value = preg_replace('/[^0-9,.\-]/', '', $value); if ($value === '') { return 0.0; } // Erkenne das Zahlenformat anhand der Position des letzten Trennzeichens $lastComma = strrpos($value, ','); $lastDot = strrpos($value, '.'); if ($lastComma !== false && ($lastDot === false || $lastComma > $lastDot)) { // Deutsches Format: "1.000,50" -> Punkt entfernen (Tausender), Komma zu Punkt $value = str_replace('.', '', $value); $value = str_replace(',', '.', $value); } else { // Englisches Format: "1,000.50" -> Komma entfernen (Tausender) $value = str_replace(',', '', $value); } return (float) $value; } public static function formatNumber($value, $dec = 2) { // Wenn der Wert bereits numerisch ist (int/float), direkt formatieren if (is_numeric($value) && ! is_string($value)) { return number_format((float) $value, $dec, self::_decimal_separator(), self::_thousands_separator()); } // Bei String-Eingaben: deutsches Format (mit Komma) zu Float konvertieren $value = self::reFormatNumber($value); return number_format($value, $dec, self::_decimal_separator(), self::_thousands_separator()); } public static function cleanIntegerFromString($value) { // Entferne alle nicht-numerischen Zeichen außer Minus $cleanStr = preg_replace('/[^0-9-]/', '', $value); // Konvertiere zu Integer und entferne führende Nullen $number = (int) $cleanStr; return $number; } public static function cleanNumberFormat($num = 0, $dec = 2, $fullzero = false) { if ($fullzero && $num == 0) { return number_format($num, $dec, self::_decimal_separator(), self::_thousands_separator()); } return rtrim(rtrim(number_format($num, $dec, self::_decimal_separator(), self::_thousands_separator()), '0'), self::_decimal_separator()); } public static function utf8ize($mixed) { if (is_array($mixed)) { foreach ($mixed as $key => $value) { $mixed[$key] = self::utf8ize($value); } } elseif (is_string($mixed)) { return mb_convert_encoding($mixed, 'UTF-8', 'UTF-8'); } return $mixed; } public static function getPostRoute() { return self::$postRoute; } public static function setPostRoute($postRoute) { self::$postRoute = $postRoute; } public static function getUserShop() { $shop = session('user_shop'); if (empty($shop) || ! is_object($shop)) { return null; } return $shop; } public static function getDefaultUserShop() { $user = \App\User::find(6); if ($user && $user->shop) { return $user->shop; } return false; } public static function getAuthUser() { if (\Session::has('auth_user')) { if ($auth_user = \Session::get('auth_user')) { return $auth_user; } } return false; } public static function getUserShopIdentifier() { if (\Session::has('user_shop_identifier')) { if ($user_shop_identifier = \Session::get('user_shop_identifier')) { return $user_shop_identifier; } } return false; } public static function getInstanceStatus() { $identifier = self::getUserShopIdentifier(); if ($identifier && \Session::has('user_shop_payment') && \Session::get('user_shop_payment') === 6) { return OrderPaymentService::getInstanceStatus($identifier); } return false; } public static function setInstanceStatus($status, $lower = true) { $identifier = self::getUserShopIdentifier(); if ($identifier && \Session::has('user_shop_payment') && \Session::get('user_shop_payment') === 6) { OrderPaymentService::updateInstanceStatus($identifier, $status, $lower); } } public static function setInstanceStatusByPayment($shopping_payment, $status, $lower = true) { if ($shopping_payment->identifier) { OrderPaymentService::updateInstanceStatus($shopping_payment->identifier, $status, $lower); } } public static function getShoppingInstance() { if (\Session::has('shopping_instance')) { return \Session::get('shopping_instance'); } return false; } public static function getUserHistory() { $auth_user = self::getAuthUser(); $user_shop_identifier = self::getUserShopIdentifier(); if ($user_shop_identifier && $auth_user) { return UserHistory::whereUserId($auth_user->id)->whereIdentifier($user_shop_identifier)->get()->last(); } return false; } public static function setUserHistoryValue($values = []) { if ($user_history = self::getUserHistory()) { foreach ($values as $key => $val) { $user_history->{$key} = $val; } $user_history->save(); } } public static function getUserHistoryValue($key) { if ($user_history = self::getUserHistory()) { return $user_history->{$key}; } return null; } public static function getUserShoppingMode() { if ($auth_user = self::getAuthUser()) { if ($auth_user->isTestMode()) { return 'test'; } } return config('app.mode'); } public static function addRoute($p = []) { $b = []; if (\Session::has('user_shop')) { if ($user_shop = \Session::get('user_shop')) { $b = ['subdomain' => $user_shop->slug]; } } return array_merge($p, $b); } public static function checkUserLandIsNot($user) { if (isset($user->account->country_id)) { // ch schweiz is out if ($user->account->country_id === 6) { return false; } return true; } return false; } public static function getCustomerUserShopDomain() { if (\Auth::guard('customers')->check()) { if (\Auth::guard('customers')->user()->user_shop_domain) { return \Auth::guard('customers')->user()->user_shop_domain; } } return self::getMyMivitaShopUrl(); } public static function getMyMivitaShopUrl($add_url = '') { if (\Session::has('user_shop_domain')) { $url = \Session::get('user_shop_domain').$add_url; if (! str_starts_with($url, 'http')) { $url = 'https://'.ltrim($url, '/'); } return $url; } // alois sein shop $user = \App\User::find(6); if ($user && $user->shop) { return config('app.protocol').$user->shop->slug.'.'.config('app.domain').config('app.tld_care').$add_url; } } /** * Vollständige URL zum Warenkorb (User-Shop) nach „Nachbestellen“ im Portal. * Verhindert Weiterleitung auf Portal/CRM/Checkout, wo /user/card/show nicht existiert (404). */ public static function getCustomerReorderCartUrl(?ShoppingOrder $shoppingOrder = null): string { $cartPath = '/user/card/show'; $candidates = []; if ($shoppingOrder?->member?->shop) { $candidates[] = config('app.protocol').$shoppingOrder->member->shop->slug.'.'.config('app.domain').config('app.tld_care'); } if (\Auth::guard('customers')->check()) { $stored = \Auth::guard('customers')->user()->user_shop_domain; if ($stored) { $candidates[] = $stored; } } if (\Session::has('user_shop_domain')) { $candidates[] = \Session::get('user_shop_domain'); } $user = User::find(6); if ($user?->shop) { $candidates[] = config('app.protocol').$user->shop->slug.'.'.config('app.domain').config('app.tld_care'); } $defaultSlug = config('domains.domains.shop.default_user_shop', 'aloevera'); $candidates[] = config('app.protocol').$defaultSlug.'.'.config('app.domain').config('app.tld_care'); foreach ($candidates as $candidate) { $normalized = self::normalizeShopBaseUrl($candidate); if ($normalized === null || self::isShopBaseUrlInvalidForUserCard($normalized)) { continue; } return $normalized.$cartPath; } return config('domains.protocol').config('domains.domains.shop.host').$cartPath; } /** * Portal, CRM und Checkout hosten keine User-Shop-Warenkorb-Route unter /user/card/show. */ public static function isShopBaseUrlInvalidForUserCard(?string $baseUrl): bool { if ($baseUrl === null || $baseUrl === '') { return true; } $host = self::extractHostFromUrl($baseUrl); if ($host === null) { return true; } $host = strtolower($host); $invalidHosts = array_filter([ config('domains.domains.portal.host'), config('domains.domains.crm.host'), config('domains.domains.checkout.host'), ]); foreach ($invalidHosts as $invalid) { if ($invalid !== null && $invalid !== '' && strtolower($invalid) === $host) { return true; } } return false; } private static function normalizeShopBaseUrl(?string $url): ?string { if ($url === null || trim($url) === '') { return null; } $u = trim($url); if (! str_starts_with($u, 'http')) { $u = 'https://'.ltrim($u, '/'); } return rtrim($u, '/'); } private static function extractHostFromUrl(string $url): ?string { $host = parse_url($url, PHP_URL_HOST); if (! empty($host)) { return $host; } $stripped = preg_replace('#^https?://#i', '', $url); $parts = explode('/', $stripped, 2); return $parts[0] !== '' ? $parts[0] : null; } public static function getMyMivitaPortalUrl($protocol = true) { $pro = $protocol ? config('app.protocol') : ''; return $pro.config('app.pre_url_portal').config('app.domain').config('app.tld_care'); } public static function getMyMivitaUrl($protocol = true) { $pro = $protocol ? config('app.protocol') : ''; return $pro.config('app.pre_url_crm').config('app.domain').config('app.tld_care'); } public static function getUserPaymentFor($instance = 'shopping') { if (Yard::instance($instance)->getYardExtra('user_shop_payment')) { return Yard::instance($instance)->getYardExtra('user_shop_payment'); } if (\Session::has('user_shop_payment')) { return \Session::get('user_shop_payment'); } return null; } public static function getUserShopBackUrl($reference = '') { if (\Session::has('user_shop')) { if (\Session::has('user_shop_domain')) { return \Session::get('user_shop_domain'); } if ($user_shop = \Session::get('user_shop')) { return config('app.protocol').$user_shop->slug.'.'.config('app.domain').config('app.tld_care').'/back/to/shop/'.$reference; } } return config('app.protocol').config('app.domain').config('app.tld_care'); } public static function getUserCardBackUrl($uri, $instance = 'shopping') { if (\Session::has('user_shop')) { if (\Session::has('user_shop_domain')) { if (\Session::has('back_link')) { return \Session::get('back_link'); } if (self::getUserPaymentFor($instance) === 3) { return \Session::get('user_shop_domain').'/user/membership'; } if (self::getUserPaymentFor($instance) === 2) { return \Session::get('user_shop_domain').'/user/orders'; } return \Session::get('user_shop_domain'); } if ($user_shop = \Session::get('user_shop')) { return config('app.protocol').$user_shop->slug.'.'.config('app.domain').config('app.tld_care').$uri; } } return config('app.protocol').config('app.domain').config('app.tld_care'); } public static function isMivitaShop() { if (Request::getHost() === 'checkout.'.config('app.domain').config('app.tld_care')) { if ($user_shop = \Session::get('user_shop')) { if ($user_shop->slug === 'aloevera' || $user_shop->slug === 'naturcosmetic') { return true; } } } if (Request::getHost() === 'naturcosmetic.'.config('app.domain').config('app.tld_care')) { return true; } return \Config::get('app.url') === config('app.domain').config('app.tld_shop'); } public static function isTestSystem($dev = false) { if (\Config::get('app.tld_care') === '.test' || \Config::get('app.tld_shop') === '.lshop') { if ($dev && config('app.debug') !== true) { return false; } return true; } return false; } public static function formatBytes($size, $precision = 2) { if ($size > 0) { $size = (int) $size; $base = log($size) / log(1024); $suffixes = [' bytes', ' KB', ' MB', ' GB', ' TB']; return round(pow(1024, $base - floor($base)), $precision).$suffixes[floor($base)]; } else { return $size; } } public static function formatTextWithLineBreaks($text, $translate = false) { if ($translate) { $translated = ['payment.commission_shop', 'payment.commission_payline', 'payment.commission_growth_bonus']; foreach ($translated as $value) { // $text = str_replace($key, trans($value), $text); $text = str_replace($value, __($value), $text); } } return nl2br($text); } public static function sanitize($string, $force_lowercase = true, $anal = false, $substr = false) { $strip = [ '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '=', '+', '[', '{', ']', '}', '\\', '|', ';', ':', '"', "'", '‘', '’', '“', '”', '–', '—', '—', '–', ',', '<', '.', '>', '/', '?', ]; $clean = trim(str_replace($strip, '', strip_tags($string))); $clean = preg_replace('/\s+/', '_', $clean); $clean = ($anal) ? preg_replace('/[^a-zA-Z0-9]/', '', $clean) : $clean; if ($substr) { $clean = (strlen($clean) > 20) ? substr($clean, -20) : $clean; } return ($force_lowercase) ? (function_exists('mb_strtolower')) ? mb_strtolower($clean, 'UTF-8') : strtolower($clean) : $clean; } }