| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | <?phpnamespace 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 '';    }}
 |