123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- namespace App\Services;
- use App\Repositories\SubsiteRepository;
- use App\Repositories\TplRepository;
- use Illuminate\Support\Facades\Cache;
- class SubsiteService
- {
- /**
- * @var SubsiteRepository
- */
- private $subsiteRepository;
- private $tplRepository;
- /**
- * SubsiteService constructor.
- * @param SubsiteRepository $subsiteRepository
- */
- public function __construct(SubsiteRepository $subsiteRepository, TplRepository $tplRepository)
- {
- $this->subsiteRepository = $subsiteRepository;
- $this->tplRepository = $tplRepository;
- }
- public function getSiteId()
- {
- $site_module = explode('.', request()->server('HTTP_HOST'))[0];
- $subsite_array = $this->getSiteDomain();
- if (!empty($subsite_array[$site_module])) {
- return $subsite_array[$site_module];
- }
- return 0;
- /*$main_domain_lenth=count(explode('.', config('app.url')));
- $host_array=explode('.', request()->getHost());
- //域名最多两级且最后一级只能是www: www.aa.bb.cc.91caiqing.com(主域名就是bb.cc.91caiqing.com)
- if (count($host_array)>($main_domain_lenth + 2)) {
- return false;
- }
- if (count($host_array) == ($main_domain_lenth + 2) && $host_array[0] != 'www') {
- return false;
- }
- //主站
- if (count($host_array) == $main_domain_lenth || (count($host_array) == ($main_domain_lenth + 1) && $host_array[0] == 'www')) {
- return 0;
- }
- //分站
- $subsite_array=$this->getSiteDomain();
- if (count($host_array) == ($main_domain_lenth + 2) && $host_array[0] == 'www') {
- $sub_domain=$host_array[1];
- return isset($subsite_array[$sub_domain])?$subsite_array[$sub_domain]:false;
- }
- $sub_domain=$host_array[0];
- return isset($subsite_array[$sub_domain])?$subsite_array[$sub_domain]:0;*/
- }
- public function getSubsite($user)
- {
- $default = ['id' => 0, 'sitename' => '总站', 'domain' => config('app.url')];
- $subsite = $this->subsiteRepository->getSubsite();
- if ($user->subsite_id == 0) {
- return $subsite;
- } else {
- foreach ($subsite as $key => $val) {
- if ($user->subsite_id == $val['id']) {
- unset($subsite[$key]);
- }
- }
- array_unshift($subsite, $default);
- return $subsite;
- }
- }
- public function getAllSubsite()
- {
- $subsites = Cache::get('subsites_list');
- if (is_null($subsites)) {
- $subsites[0] = ['id' => 0, 'sitename' => '总站', 'domain' => config('app.url')];
- $list = $this->subsiteRepository->getSubsite();
- if (!$list) {
- return null;
- }
- foreach ($list as $value) {
- $subsites[$value['id']] = $value;
- }
- Cache::forever('subsites_list', $subsites);
- }
- return $subsites;
- }
- public function getSubsiteDomain($subsite_id = 0)
- {
- $app_url = config('app.url');
- if ($subsite_id > 0) {
- $subsites = $this->getAllSubsite();
- $subsite = $subsites[$subsite_id];
- $host = explode('.', parse_url($app_url)['host']);
- $app_url = str_replace('://' . $host[0], '://' . $subsite['domain'], $app_url);
- }
- if (!empty(request()->route()) && is_mobile_route()) {
- $app_url .= "/mobile";
- }
- return $app_url;
- }
- public function getSiteDomain()
- {
- $sub_array = Cache::get('subsites_domain');
- if (is_null($sub_array)) {
- $sub_array = $this->subsiteRepository->getSiteDomain();
- Cache::forever('subsites_domain', $sub_array);
- }
- return $sub_array;
- }
- public function getSubsiteConfig($key, $default = null, $subsite_id = null)
- {
- $subsite_id = is_null($subsite_id) ? $this->getSiteId() : $subsite_id;
- if ($subsite_id == 0) {
- return config($key, $default);
- } else {
- $key_array = explode('.', $key);
- $subsite_array = $this->getAllSubsite();
- $value = array_get($subsite_array[$subsite_id], end($key_array), $default);
- if (empty($value) && !is_numeric($value)) {
- return config($key, $default);
- }
- return $value;
- }
- }
- //获取模板名称
- public function getSubsiteTpl($subsite_id)
- {
- $subsites = $this->getAllSubsite();
- if ($subsite_id) {
- if (array_has($subsites, $subsite_id)) {
- $sub_info = $subsites[$subsite_id];
- if (array_has($sub_info, 'tpl')) {
- $tpl_id = $sub_info['tpl'];
- $tpl_where = ['id' => $tpl_id, 'display' => 1];
- $tpl_info = $this->tplRepository->getDefaultTpl($tpl_where);
- if ($tpl_info) {
- return $tpl_info->blade_name;
- }
- }
- }
- }
- return '';
- }
- }
|