| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- namespace backend\modules\mall\services;
- use common\enums\RedisKeyEnum;
- use common\enums\StatusEnum;
- use common\models\common\Addons;
- use common\models\mall\MallAddons;
- use Yii;
- use yii\base\BaseObject;
- use yii\helpers\Json;
- use common\helpers\Auth;
- /**
- *
- * 应用置顶服务
- */
- class TopAddonsService extends BaseObject
- {
- /**
- * MallId
- *
- * @var integer
- */
- public $mall_id;
- /**
- * Error
- *
- * @var string
- */
- public $error;
- public function __construct($config)
- {
- parent::__construct($config);
- }
- /**
- * 设置一个置顶插件
- *
- * @param string $name
- * @return boolean
- */
- public function setTopAddons($name)
- {
- $mall_id = $this->mall_id;
- $addons = Addons::getOne([['name' => $name], ['is_online' => 1]], true, ['mallAddons' => function ($query) use ($mall_id) {
- $query->where(['mall_id' => $mall_id])->andWhere(['<>', 'status', StatusEnum::DELETE]);
- }]);
- if (empty($addons)) {
- return $this->error('插件不存在');
- }
- // 当前置顶插件
- $top_addons = Yii::$app->services->setting->mall->get($this->mall_id, 'top_addons.addons_name');
- $top_addons = empty($top_addons) ? [] : Json::decode($top_addons);
- if (in_array($addons['name'], $top_addons)) {
- return $this->error('当前插件已置顶');
- }
- // 合并插件
- $top_addons = array_merge([$addons['name']], $top_addons);
- $top_addons = Yii::$app->services->setting->mall->set(
- $this->mall_id,
- [
- 'top_addons' => [
- 'addons_name' => Json::encode($top_addons),
- ],
- ]
- );
- $mallAddons = $addons['mallAddons'] ?? [];
- MallAddons::addonsIntoCache($this->mall_id,$name,$mallAddons);
- return true;
- }
- /**
- * 取消应用置顶
- *
- * @param string $name
- * @return boolean
- */
- public function setBottomAddons($name)
- {
- $addons = Addons::find()->where(['name' => $name])->one();
- if (empty($addons)) {
- return $this->error('插件不存在');
- }
- // 当前置顶插件
- $top_addons = Yii::$app->services->setting->mall->get($this->mall_id, 'top_addons.addons_name');
- $top_addons = empty($top_addons) ? [] : Json::decode($top_addons);
- // 删除取消置顶的插件
- $top_addons = array_diff($top_addons, [$name]);
- Yii::$app->services->setting->mall->set(
- $this->mall_id,
- [
- 'top_addons' => [
- 'addons_name' => Json::encode($top_addons),
- ],
- ]
- );
- return true;
- }
- /**
- * 获取顶部插件navs
- *
- * @return array
- */
- public function getAddonsNavs()
- {
- // 获取所有置顶插件
- $top_addons = Yii::$app->services->setting->mall->get($this->mall_id, 'top_addons.addons_name');
- $top_addons = empty($top_addons) ? [] : Json::decode($top_addons);
- if (empty($top_addons)) {
- return [];
- }
- // 获取用户拥有的应用列表
- $list = Addons::find()
- ->where(['name' => $top_addons])
- ->select('id, title, name, cover, course_url')
- ->asArray()
- ->all();
- $cache = Yii::$app->cache;
- $attachurl = Yii::getAlias('@attachurl');
- //获取商城现有的插件
- $valid_addons = MallAddons::getValidAddons($this->mall_id);
- //获取用户所有权限
- $authList = Auth::getAuth();
- foreach ($list as $k => $v) {
- if(!in_array($v['name'],$valid_addons)){
- unset($list[$k]);
- continue;
- }
- // 获取首页链接
- $cache_key = RedisKeyEnum::suffix(RedisKeyEnum::BACKEND_MENU, $v['name'], true);
- $cacheData = $cache->get($cache_key);
- $list[$k]['url'] = $cacheData[0]['url'] ?? '';
- if(empty($v['cover'])){
- $list[$k]['cover'] = $attachurl.'/static/addons/icon/'.$v['name'].'.png';
- }
- //没有权限就删除该插件的显示
- if (!Yii::$app->services->auth->isSuperAdmin()) {
- if(!empty($list[$k]['url']) && !in_array($list[$k]['url'],$authList)){
- unset($list[$k]);
- continue;
- }
- }
- }
- return array_values($list);
- }
- /**
- * 错误返回
- *
- * @param string $msg
- * @return false
- */
- private function error($msg = '')
- {
- $this->error = $msg;
- return false;
- }
- }
|