TopAddonsService.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace backend\modules\mall\services;
  3. use common\enums\RedisKeyEnum;
  4. use common\enums\StatusEnum;
  5. use common\models\common\Addons;
  6. use common\models\mall\MallAddons;
  7. use Yii;
  8. use yii\base\BaseObject;
  9. use yii\helpers\Json;
  10. use common\helpers\Auth;
  11. /**
  12. *
  13. * 应用置顶服务
  14. */
  15. class TopAddonsService extends BaseObject
  16. {
  17. /**
  18. * MallId
  19. *
  20. * @var integer
  21. */
  22. public $mall_id;
  23. /**
  24. * Error
  25. *
  26. * @var string
  27. */
  28. public $error;
  29. public function __construct($config)
  30. {
  31. parent::__construct($config);
  32. }
  33. /**
  34. * 设置一个置顶插件
  35. *
  36. * @param string $name
  37. * @return boolean
  38. */
  39. public function setTopAddons($name)
  40. {
  41. $mall_id = $this->mall_id;
  42. $addons = Addons::getOne([['name' => $name], ['is_online' => 1]], true, ['mallAddons' => function ($query) use ($mall_id) {
  43. $query->where(['mall_id' => $mall_id])->andWhere(['<>', 'status', StatusEnum::DELETE]);
  44. }]);
  45. if (empty($addons)) {
  46. return $this->error('插件不存在');
  47. }
  48. // 当前置顶插件
  49. $top_addons = Yii::$app->services->setting->mall->get($this->mall_id, 'top_addons.addons_name');
  50. $top_addons = empty($top_addons) ? [] : Json::decode($top_addons);
  51. if (in_array($addons['name'], $top_addons)) {
  52. return $this->error('当前插件已置顶');
  53. }
  54. // 合并插件
  55. $top_addons = array_merge([$addons['name']], $top_addons);
  56. $top_addons = Yii::$app->services->setting->mall->set(
  57. $this->mall_id,
  58. [
  59. 'top_addons' => [
  60. 'addons_name' => Json::encode($top_addons),
  61. ],
  62. ]
  63. );
  64. $mallAddons = $addons['mallAddons'] ?? [];
  65. MallAddons::addonsIntoCache($this->mall_id,$name,$mallAddons);
  66. return true;
  67. }
  68. /**
  69. * 取消应用置顶
  70. *
  71. * @param string $name
  72. * @return boolean
  73. */
  74. public function setBottomAddons($name)
  75. {
  76. $addons = Addons::find()->where(['name' => $name])->one();
  77. if (empty($addons)) {
  78. return $this->error('插件不存在');
  79. }
  80. // 当前置顶插件
  81. $top_addons = Yii::$app->services->setting->mall->get($this->mall_id, 'top_addons.addons_name');
  82. $top_addons = empty($top_addons) ? [] : Json::decode($top_addons);
  83. // 删除取消置顶的插件
  84. $top_addons = array_diff($top_addons, [$name]);
  85. Yii::$app->services->setting->mall->set(
  86. $this->mall_id,
  87. [
  88. 'top_addons' => [
  89. 'addons_name' => Json::encode($top_addons),
  90. ],
  91. ]
  92. );
  93. return true;
  94. }
  95. /**
  96. * 获取顶部插件navs
  97. *
  98. * @return array
  99. */
  100. public function getAddonsNavs()
  101. {
  102. // 获取所有置顶插件
  103. $top_addons = Yii::$app->services->setting->mall->get($this->mall_id, 'top_addons.addons_name');
  104. $top_addons = empty($top_addons) ? [] : Json::decode($top_addons);
  105. if (empty($top_addons)) {
  106. return [];
  107. }
  108. // 获取用户拥有的应用列表
  109. $list = Addons::find()
  110. ->where(['name' => $top_addons])
  111. ->select('id, title, name, cover, course_url')
  112. ->asArray()
  113. ->all();
  114. $cache = Yii::$app->cache;
  115. $attachurl = Yii::getAlias('@attachurl');
  116. //获取商城现有的插件
  117. $valid_addons = MallAddons::getValidAddons($this->mall_id);
  118. //获取用户所有权限
  119. $authList = Auth::getAuth();
  120. foreach ($list as $k => $v) {
  121. if(!in_array($v['name'],$valid_addons)){
  122. unset($list[$k]);
  123. continue;
  124. }
  125. // 获取首页链接
  126. $cache_key = RedisKeyEnum::suffix(RedisKeyEnum::BACKEND_MENU, $v['name'], true);
  127. $cacheData = $cache->get($cache_key);
  128. $list[$k]['url'] = $cacheData[0]['url'] ?? '';
  129. if(empty($v['cover'])){
  130. $list[$k]['cover'] = $attachurl.'/static/addons/icon/'.$v['name'].'.png';
  131. }
  132. //没有权限就删除该插件的显示
  133. if (!Yii::$app->services->auth->isSuperAdmin()) {
  134. if(!empty($list[$k]['url']) && !in_array($list[$k]['url'],$authList)){
  135. unset($list[$k]);
  136. continue;
  137. }
  138. }
  139. }
  140. return array_values($list);
  141. }
  142. /**
  143. * 错误返回
  144. *
  145. * @param string $msg
  146. * @return false
  147. */
  148. private function error($msg = '')
  149. {
  150. $this->error = $msg;
  151. return false;
  152. }
  153. }