first(); if ($x == null) { $a = new \stdClass(); return ''; } if (config('app.xlang') && ($x->type == 'cat' || $x->type == 'category')) { $defLang = config('app.xlang_main'); return $x->getTranslations('value')[$defLang]; } return $x->value; } /*** * get category form setting by key * @param string $key setting key * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|string|Category|null */ function getSettingCategory($key) { $x = getSetting($key); return Category::where('id', $x)->first(); } /*** * get product category by setting key * @param string $key setting key * @return Cat|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|string|null */ function getSettingCat($key) { $x = getSetting($key); return Cat::where('id', $x)->first(); } /*** * get stock types * @return array */ function stockTypes() { return ["IN_STOCK" => __("In stock"), "OUT_STOCK" => __("Out stock"), "BACK_ORDER" => __("Back order")]; } /*** * make meta with key and value * @param $metaz * @return array */ function metaing($metaz) { $out = []; if ($metaz == null) { return $out; } foreach ($metaz as $k => $meta) { $out[$k] = $meta->value; } return $out; } /*** * get just pricable meta of product * @param Product $pro * @return array */ function getPriceableMeta(Product $pro) { $metas = $pro->getAllMeta()->toArray(); if (count($metas) == 0) { return []; } $pricables = $pro->category->props()->where('priceable', 1)->pluck('name')->toArray(); $result = []; if (is_array($pricables)) { foreach ($pricables as $price) { if (isset($metas[$price])) { $result[$price] = $metas[$price]; } } } return $result; } /*** * show product categories in node with ul-li * @param $cats category node * @param $liClass class of lis * @param $ulClass class of uls * @return string */ function showCats($cats = [], $liClass = '', $ulClass = '') { if ($cats == []) { $cats = Cat::whereNull('parent_id')->get(); } $txt = ''; foreach ($cats as $cat) { $txt .= '
  • ' . $cat->name . ''; if ($cat->children()->count() > 0) { // $txt .='
  • '.$cat->name; $txt .= ''; } else { } $txt .= '
  • '; } return $txt; } /*** * show menu node for manage * @param $arr * @return string */ function showMenuMange($arr) { $back = ''; foreach ($arr as $menu) { $ol = ''; if ($menu->children()->count() > 0) { $ol = '
      ' . showMenuMange($menu->children()->orderBy('sort')->get()) . '
    '; } $back .= <<
  • $menu->title $ol
  • LI; } return $back; } /*** * show menu node * @param array $arr * @return string */ function showMenu($arr) { $back = ''; foreach ($arr as $menu) { $ol = ''; if ($menu->children()->count() > 0) { $ol = '
      ' . showMenu($menu->children()->orderBy('sort')->get()) . '
    '; } switch ($menu->kind) { case "empty": $back .= << $ol LI; break; case "link": $back .= << $ol LI; break; case "news": break; case "cat": break; case "cat-sub": break; case "cat-news": break; case "tag": break; case "tag-sub": break; default: } } return $back; } /*** * show input products categories node * @param Cat[] $arr * @return string */ function showCatNode($arr) { $ret = ''; foreach ($arr as $cat) { $ret .= "
  • $cat->name
      "; if ($cat->children()->count() > 0) { $ret .= showCatNode($cat->children); } $ret .= "
  • "; } return $ret; } /*** * show menu items as types * @param MenuItem[] $items * @return string */ function MenuShowItems($items) { $out = ''; foreach ($items as $item) { $out .= '
  • '; switch ($item->kind) { case "tag": $out .= '' . $item->title . ''; break; case "link": $out .= '' . $item->title . ''; break; case "news": $n = Post::whereId($item->menuable_id)->firstOrFail(); $out .= '' . $item->title . ''; break; case "tag-sub": $out .= $item->title; $news = Post::withAnyTag($item->meta)->limit(10)->get(['title', 'slug']); $out .= ''; break; case "cat": $cat = Category::whereId($item->menuable_id)->firstOrFail(); $out .= '' . $item->title . ''; break; case "cat-sub": $out .= $item->title; $cats = Category::where('parent_id', $item->menuable_id)->limit(20)->get(['name', 'slug']); $out .= ''; break; case "cat-news": $out .= '' . $item->title . ''; $cat = Category::whereId($item->menuable_id)->firstOrFail(); $news = $cat->posts()->limit(10)->get(['slug', 'title']); $out .= ''; break; default: $out .= $item->title; if ($item->children()->count() > 0) { $out .= ''; } } $out .= '
  • '; } $out .= ''; return $out; } /*** * show menu by name * @param $menu_name * @return string */ function MenuShowByName($menu_name) { $menu = Menu::whereName($menu_name)->firstOrFail(); return MenuShowItems($menu->menuItems()->whereNull('parent')->get()); } /*** * make breadcrumbs for admin panel * @return void */ function lastCrump() { $routes = explode('.', Route::currentRouteName()); if (count($routes) != 3) { echo '
  • ' . __(ucfirst($routes[count($routes) - 1])) . '
  • '; return; } $route = $routes[count($routes) - 1]; if ($route == 'home') { return; } if ($route == 'all' || $route == 'index' || $route == 'list') { echo '
  • ' . __(ucfirst($routes[count($routes) - 2])) . '
  • '; } else { $link = '#'; $temp = $routes; array_pop($temp); $temp = implode('.', $temp) . '.'; if (Route::has($temp . 'index')) { $link = \route($temp . 'index'); } elseif (Route::has($temp . 'all')) { $link = \route($temp . 'all'); } elseif (Route::has($temp . 'list')) { $link = \route($temp . 'list'); } echo '
  • ' . __(ucfirst($routes[count($routes) - 2])) . '
  • '; switch ($route) { case 'create': $title = __('Add') . ' ' . __($routes[count($routes) - 2]); $icon = 'fa fa-add'; break; case 'edit': $title = __('Edit') . ' ' . __($routes[count($routes) - 2]); $icon = 'fa fa-edit'; break; case 'show': $title = __('Show') . ' ' . __($routes[count($routes) - 2]); $icon = 'fa fa-eye'; break; case 'sort': $title = __('Sort') . ' ' . __($routes[count($routes) - 2]); $icon = 'fa fa-sort'; break; default: $title = __('') . ' ' . __(ucfirst($routes[count($routes) - 1])); $icon = 'fa fa-cube'; break; } echo '
  • ' . $title . '
  • '; } } /*** * get main product categories * @param int $limit * @return Cat[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection|\LaravelIdea\Helper\App\Models\_IH_Cat_C */ function getMainCats($limit = 10) { return Cat::whereNull('parent_id')->limit($limit)->get(); } /*** * get products by category id * @param int $id * @param string $order * @param string $orderMethod * @param int $limit * @return Product[]|array|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Product_C */ function getProductByCat($id, $order = 'id', $orderMethod = 'desc', $limit = 10) { $cat = Cat::where('id', $id)->first(); if ($cat == null) { return []; } return $cat->active_products()->where('active', 1) ->orderBy($order, $orderMethod)->limit($limit)->get(); } /*** * get product by category id where `stock_quantity` more than 0 * @param int $id * @param string $order * @param int $limit * @return Product[]|array|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Product_C */ function getProductByCatQ($id, $order = 'id', $limit = 10) { $cat = Cat::where('id', $id)->first(); if ($cat == null) { return []; } return $cat->products()->where('active', 1)->where('stock_quantity', '>', 0) ->orderByDesc('id')->limit($limit)->get(); } /*** * get sub product categories by id * @param $id * @return Cat[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Cat_C */ function getSubCats($id, $limit = 99) { return Cat::where('parent_id', $id)->limit($limit)->get(); } /*** * get products with sort * @param string $order * @param string $orderMethod * @param int $limit * @return Product[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection|\LaravelIdea\Helper\App\Models\_IH_Product_C */ function getProducts($order = 'id', $orderMethod = 'desc', $limit = 10) { return Product::orderBy($order, $orderMethod)->limit($limit)->get(); } /*** * get property by name * @param string $name * @return Prop|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null */ function getProp($name) { return Prop::where('name', $name)->first(); } /*** * get unit of property by name * @param string $name * @return \Illuminate\Database\Eloquent\HigherOrderBuilderProxy|mixed|string|null */ function getPropUnit($name) { if (Prop::where('name', $name)->count() == 0) { return ''; } return Prop::where('name', $name)->first()->unit; } /*** * get label of property by name * @param string $name * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Translation\Translator|\Illuminate\Database\Eloquent\HigherOrderBuilderProxy|mixed|string|null */ function getPropLabel($name) { if (Prop::where('name', $name)->count() == 0) { return ''; } $n = Prop::where('name', $name)->first(); if ($n != null) { return Prop::where('name', $name)->first()->label; } else { if ($name == 'weight') { return __('weight'); } else { return $name; } } } /*** * check is json or not * @param string $str * @return bool */ function isJson($str) { $json = json_decode($str); return $json && $str != $json; } /*** * json decode and sort * @param array $json * @return mixed */ function jsonOrder($json) { $data = json_decode($json, true); asort($data); return $data; } /*** * get meta value * @param string $key * @param string $value * @return void */ function getMetaValue($key, $value) { $p = Prop::whereName($key)->first(); foreach (json_decode($p->options) as $n) { if ($n->value == $value) { return $n->title; } } } /*** * show meta with values * @param string $key * @param string $value * @return string */ function showMeta($key, $value) { if (Prop::whereName('warranty')->count() == 0 && $key == 'warranty') { return ''; } if ($key == 'weight') { return $value . ' ' . __('Gram(s)'); } if ($key == 'warranty') { $p = Prop::whereName('warranty')->first(); foreach (json_decode($p->options) as $n) { if ($n->value == $value) { return $n->title; } } } if ($key == 'color') { return '
    ' . getColorName($value) . ''; } $txt = $value; if (isJson($value)) { $txt = ''; foreach (json_decode($value, true) as $item) { $txt .= '
    ' . $item['title'] . '
    '; } } return trim($txt . ' ' . getPropUnit($key)); } /*** * time to persian date * @param $date * @param $format * @return float|int|string|\Xmen\StarterKit\Helpers\timestamp */ function time2persian($date, $format = 'Y/m/d') { if ($date == null) { return '-'; } $dt = new TDate(); return $dt->PDate($format, $date); } /*** * get colors * @return array */ function getColors() { $colors = Prop::where('name', 'color')->first(); if ($colors == null) { return []; } $data = json_decode($colors->options, true); $result = []; foreach ($data as $color) { $result[$color['value']] = $color['title']; } return $result; } /*** * get color name * @param $colorVal * @return mixed|string */ function getColorName($colorVal) { $colors = Prop::where('name', 'color')->first(); if ($colors == null) { return 'رنگ'; } $data = json_decode($colors->options, true); foreach ($data as $color) { if ($colorVal == $color['value']) { return $color['title']; } } return 'رنگ'; } /*** * make chartjs * @param $pro * @return string */ function makeChart($pro) { $times = $pro->prices_history()->pluck('created_at')->toArray(); $dates = []; foreach (array_reverse($times) as $time) { $dates[] = \App\Helpers\time2persian($time->timestamp, 'd F Y'); } $dts = json_encode($dates); $prs = json_encode(array_reverse($pro->prices_history()->pluck('price')->toArray())); $text = << TXT; return $text; } /*** * make breadcrumb * @param Product $p * @param Cat $c * @return array[] */ function makeProductBreadcrumb(Product $p, Cat $c) { $items = [ [ 'name' => $c->name, 'link' => \route('product-category.show', $c->slug) ] ]; while ($c->parent_id != null) { $c = Cat::where('id', $c->parent_id)->first(); $items[] = [ 'name' => $c->name, 'link' => \route('product-category.show', $c->slug) ]; } $items = array_reverse($items); $items[] = [ 'name' => $p->name, 'link' => \route('product', $p->slug) ]; return $items; } /*** * show markup breadcrumb * @param $itemz * @return void */ function showBreadcrumb($itemz = []) { $text = << { "@context": "https://schema.org/", "@type": "BreadcrumbList", "itemListElement": [ ITEMS ] } DOC; $items = '{ "@type": "ListItem", "position": 1, "name": "' . config('app.name') . '", "item": "' . route('welcome') . '" },'; foreach ($itemz as $k => $item) { $items .= '{ "@type": "ListItem", "position": ' . ($k + 2) . ', "name": "' . $item['name'] . '", "item": "' . $item['link'] . '" },'; } $items = ltrim($items); echo str_replace('ITEMS', $items, $text); } /*** * get items count in shoppig card * @return int */ function cardCount() { return count(array_merge(unserialize(session('card', serialize([]))), unserialize(session('qcard', serialize([]))))); } /*** * send sms * @param string $number phone number * @param string $content sms content * @return bool|string */ function sendSMSText($number, $content) { $url = config('app.sms_url'); $options = array( 'content-type' => 'application/x-www-form-urlencoded', 'postman-token' => '3e37c158-2c35-75aa-1ae7-f76d90ebbe8f', 'cache-control' => 'no-cache' ); $fields_string = http_build_query(array( 'username' => config('app.sms_user'), 'password' => config('app.sms_pass'), 'to' => $number, 'from' => config('app.sms_number'), 'text' => $content, 'isflash' => 'false' )); //open connection $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); //So that curl_exec returns the contents of the cURL; rather than echoing it curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //execute post $result = curl_exec($ch); return $result; } /*** * send sms * @param string $number phone number * @param string $content sms content * @return bool|string */ function sendSMSText2($number, $content) { $url = config('app.sms_url'); $options = array( 'content-type' => 'application/x-www-form-urlencoded', 'cache-control' => 'no-cache' ); $fields_string = http_build_query(array( 'user' => config('app.sms_user'), 'password' => config('app.sms_pass'), 'number' => $number, 'text' => $content, 'isflash' => 'false' )); //open connection $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); //So that curl_exec returns the contents of the cURL; rather than echoing it curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //execute post $result = curl_exec($ch); return json_decode($result, true); } /*** * remove title of html code * @param $str * @return array|string|string[]|null */ function remTitle($str) { $re = '/(.*?)<\/title>/m'; return preg_replace($re, '', $str); } /*** * show json by key * @param $json * @param $key * @return mixed|string */ function showJsonByKey($json, $key) { $x = json_decode($json); $x = json_decode($x->data, true); $items = json_decode(\App\Helpers\getProp('size')->options, true); foreach ($items as $item) { if ($x[$key] == $item['value']) { return $item['title']; } } return 'x'; } /*** * find html links * @param $html * @return string|null */ function findLink($html) { $url = preg_match('/<a href="(.+)">/', $html, $match); if (!isset($match[1])) { return null; } return $match[1]; } function showMenuMange2($arr) { $back = ''; $tr = ''; foreach ($arr as $menu) { $ol = ''; if ($menu->children()->count() > 0) { $ol = '<ol>' . showMenuMange2($menu->children()->orderBy('sort')->get()) . '</ol>'; } if (config('app.xlang')) { $l = route('admin.lang.model', [$menu->id, MenuItem::class]); $tr = <<<TR <a href="$l" class="float-end"> <i class="ri-translate"></i> </a> TR; } $back .= <<<LI <li class="list-group-item" data-menuabletype="$menu->menuable_type" data-menuableid="$menu->menuable_id" data-meta="$menu->meta" data-kind="$menu->kind" data-item-id="$menu->id" data-title="$menu->title" > <span> $menu->title $tr </span> $ol </li> LI; } return $back; } function xroute($rt, $args = []) { if (config('app.xlang_main') != app()->getLocale()) { return \route($rt, $args); } else { return \route($rt, $args); } } function digitsToLatin($number) { if ($number == null) { return null; } $latin = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; $arabic = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']; $persian2 = ['\\u06f0', '\\u06f1', '\\u06f2', '\\u06f3', '\\u06f4', '\\u06f5', '\\u06f6', '\\u06f7', '\\u06f8', '\\u06f9']; $arabic2 = ['\\u0660', '\\u0661', '\\u0662', '\\u0663', '\\u0664', '\\u0665', '\\u0666', '\\u0667', '\\u0668', '\\u0669']; $number = str_replace($persian, $latin, $number); $number = str_replace($persian2, $latin, $number); $number = str_replace($arabic2, $latin, $number); return str_replace($arabic, $latin, $number); } /** * @param $lang code like fa * @return string */ function getEmojiLanguagebyCode($lang) { $languages = array( "af" => "🇿🇦", // Afrikaans "sq" => "🇦🇱", // Albanian "am" => "🇪🇹", // Amharic "ar" => "🇸🇦", // Arabic "hy" => "🇦🇲", // Armenian "az" => "🇦🇿", // Azerbaijani "eu" => "🇪🇸", // Basque "be" => "🇧🇾", // Belarusian "bn" => "🇧🇩", // Bengali "bs" => "🇧🇦", // Bosnian "bg" => "🇧🇬", // Bulgarian "ca" => "🇪🇸", // Catalan "zh" => "🇨🇳", // Chinese "hr" => "🇭🇷", // Croatian "cs" => "🇨🇿", // Czech "da" => "🇩🇰", // Danish "nl" => "🇳🇱", // Dutch "en" => "🇺🇸", // English "et" => "🇪🇪", // Estonian "fi" => "🇫🇮", // Finnish "fr" => "🇫🇷", // French "gl" => "🇪🇸", // Galician "ka" => "🇬🇪", // Georgian "de" => "🇩🇪", // German "el" => "🇬🇷", // Greek "gu" => "🇮🇳", // Gujarati "ht" => "🇭🇹", // Haitian "he" => "🇮🇱", // Hebrew "hi" => "🇮🇳", // Hindi "hu" => "🇭🇺", // Hungarian "is" => "🇮🇸", // Icelandic "id" => "🇮🇩", // Indonesian "ga" => "🇮🇪", // Irish "it" => "🇮🇹", // Italian "ja" => "🇯🇵", // Japanese "kk" => "🇰🇿", // Kazakh "ko" => "🇰🇷", // Korean "lv" => "🇱🇻", // Latvian "lt" => "🇱🇹", // Lithuanian "mk" => "🇲🇰", // Macedonian "ms" => "🇲🇾", // Malay "ml" => "🇮🇳", // Malayalam "mt" => "🇲🇹", // Maltese "mn" => "🇲🇳", // Mongolian "no" => "🇳🇴", // Norwegian "ps" => "🇦🇫", // Pashto "fa" => "🇮🇷", // Persian "pl" => "🇵🇱", // Polish "pt" => "🇵🇹", // Portuguese "ro" => "🇷🇴", // Romanian "ru" => "🇷🇺", // Russian "sr" => "🇷🇸", // Serbian "sk" => "🇸🇰", // Slovak "sl" => "🇸🇮", // Slovenian "es" => "🇪🇸", // Spanish "sw" => "🇰🇪", // Swahili "sv" => "🇸🇪", // Swedish "ta" => "🇮🇳", // Tamil "te" => "🇮🇳", // Telugu "th" => "🇹🇭", // Thai "tr" => "🇹🇷", // Turkish "uk" => "🇺🇦", // Ukrainian "ur" => "🇵🇰", // Urdu "uz" => "🇺🇿", // Uzbek "vi" => "🇻🇳", // Vietnamese "cy" => "🇬🇧" // Welsh ); $lang = strtolower($lang); if (array_key_exists($lang, $languages)) { return $languages[$lang]; } else { return "❓"; } }