mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-26 20:52:44 +08:00
整理清除数据万象后的调整
This commit is contained in:
parent
a69b9df86b
commit
a0770f6fcd
@ -6,13 +6,12 @@
|
|||||||
|
|
||||||
都有些什么功能?我也不想写一大堆,自己体验吧!
|
都有些什么功能?我也不想写一大堆,自己体验吧!
|
||||||
|
|
||||||
|
帐号:100015@163.com / 123456 (前后台通用)
|
||||||
|
|
||||||
PS:**系统后台已禁止提交并隐藏私人配置**
|
PS:**系统后台已禁止提交并隐藏私人配置**
|
||||||
|
|
||||||
- [前台演示](https://ctc.koogua.com)
|
- [前台演示](https://ctc.koogua.com)
|
||||||
- [后台演示](https://ctc.koogua.com/admin)
|
- [后台演示](https://ctc.koogua.com/admin)
|
||||||
- [系统截图](https://gitee.com/koogua/course-tencent-cloud/wikis/系统截图)
|
|
||||||
|
|
||||||
体验帐号: 100015@163.com / 123456
|
|
||||||
|
|
||||||
#### 项目组件
|
#### 项目组件
|
||||||
|
|
||||||
@ -33,7 +32,7 @@ PS:**系统后台已禁止提交并隐藏私人配置**
|
|||||||
#### 安装指南
|
#### 安装指南
|
||||||
|
|
||||||
- [运行环境搭建](https://gitee.com/koogua/course-tencent-cloud-docker)
|
- [运行环境搭建](https://gitee.com/koogua/course-tencent-cloud-docker)
|
||||||
- [腾讯服务配置](https://gitee.com/koogua/course-tencent-cloud-docker/wikis/腾讯服务配置)
|
- [系统服务配置](https://gitee.com/koogua/course-tencent-cloud/wikis/服务配置)
|
||||||
|
|
||||||
#### 会推出商业服务吗?
|
#### 会推出商业服务吗?
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ class ConsultList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class CourseFavoriteList extends Builder
|
|||||||
|
|
||||||
$courses = $courseRepo->findByIds($ids, $columns);
|
$courses = $courseRepo->findByIds($ids, $columns);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ class CourseFavoriteList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ class CourseList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class CourseTopicList extends Builder
|
|||||||
|
|
||||||
$courses = $courseRepo->findByIds($ids, $columns);
|
$courses = $courseRepo->findByIds($ids, $columns);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class CourseUserList extends Builder
|
|||||||
|
|
||||||
$courses = $courseRepo->findByIds($ids, $columns);
|
$courses = $courseRepo->findByIds($ids, $columns);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ class CourseUserList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ class DanmuList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ class ImFriendUserList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, $columns);
|
$users = $userRepo->findByIds($ids, $columns);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class ImGroupList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ class ImGroupUserList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, $columns);
|
$users = $userRepo->findByIds($ids, $columns);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ class ImGroupUserList extends Builder
|
|||||||
|
|
||||||
$users = $this->getGroupOwners($groups->toArray());
|
$users = $this->getGroupOwners($groups->toArray());
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ class ImMessageList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ class OrderList extends Builder
|
|||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->imgBaseUrl = kg_ci_base_url();
|
$this->imgBaseUrl = kg_ss_url();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,7 +55,7 @@ class ReviewList extends Builder
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ class UserList extends Builder
|
|||||||
|
|
||||||
public function handleUsers(array $users)
|
public function handleUsers(array $users)
|
||||||
{
|
{
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
foreach ($users as $key => $user) {
|
foreach ($users as $key => $user) {
|
||||||
$users[$key]['avatar'] = $baseUrl . $user['avatar'];
|
$users[$key]['avatar'] = $baseUrl . $user['avatar'];
|
||||||
|
@ -4,39 +4,32 @@ namespace App\Console\Tasks;
|
|||||||
|
|
||||||
use App\Library\Cache\Backend\Redis as RedisCache;
|
use App\Library\Cache\Backend\Redis as RedisCache;
|
||||||
use Phalcon\Cli\Task;
|
use Phalcon\Cli\Task;
|
||||||
|
use Phalcon\Config;
|
||||||
|
|
||||||
class CleanSessionTask extends Task
|
class CleanSessionTask extends Task
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* @var RedisCache
|
|
||||||
*/
|
|
||||||
protected $cache;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var \Redis
|
|
||||||
*/
|
|
||||||
protected $redis;
|
|
||||||
|
|
||||||
public function mainAction()
|
public function mainAction()
|
||||||
{
|
{
|
||||||
$this->cache = $this->getDI()->get('cache');
|
$config = $this->getConfig();
|
||||||
|
|
||||||
$this->redis = $this->cache->getRedis();
|
$cache = $this->getCache();
|
||||||
|
|
||||||
|
$redis = $cache->getRedis();
|
||||||
|
|
||||||
|
$redis->select($config->path('session.db'));
|
||||||
|
|
||||||
$keys = $this->querySessionKeys(10000);
|
$keys = $this->querySessionKeys(10000);
|
||||||
|
|
||||||
if (count($keys) == 0) return;
|
if (count($keys) == 0) return;
|
||||||
|
|
||||||
$config = $this->getDI()->get('config');
|
$lifetime = $config->path('session.lifetime');
|
||||||
|
|
||||||
$lifetime = $config->session->lifetime;
|
|
||||||
|
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
$ttl = $this->redis->ttl($key);
|
$ttl = $redis->ttl($key);
|
||||||
$content = $this->redis->get($key);
|
$content = $redis->get($key);
|
||||||
if (empty($content) && $ttl < $lifetime * 0.5) {
|
if (empty($content) && $ttl < $lifetime * 0.5) {
|
||||||
$this->redis->del($key);
|
$redis->del($key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,7 +42,29 @@ class CleanSessionTask extends Task
|
|||||||
*/
|
*/
|
||||||
protected function querySessionKeys($limit)
|
protected function querySessionKeys($limit)
|
||||||
{
|
{
|
||||||
return $this->cache->queryKeys('_PHCR', $limit);
|
$cache = $this->getCache();
|
||||||
|
|
||||||
|
return $cache->queryKeys('_PHCR', $limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getConfig()
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var Config $config
|
||||||
|
*/
|
||||||
|
$config = $this->getDI()->get('config');
|
||||||
|
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCache()
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var RedisCache $cache
|
||||||
|
*/
|
||||||
|
$cache = $this->getDI()->get('cache');
|
||||||
|
|
||||||
|
return $cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ namespace App\Http\Admin\Controllers;
|
|||||||
use App\Http\Admin\Services\Chapter as ChapterService;
|
use App\Http\Admin\Services\Chapter as ChapterService;
|
||||||
use App\Http\Admin\Services\ChapterContent as ChapterContentService;
|
use App\Http\Admin\Services\ChapterContent as ChapterContentService;
|
||||||
use App\Http\Admin\Services\Course as CourseService;
|
use App\Http\Admin\Services\Course as CourseService;
|
||||||
use App\Http\Admin\Services\Setting as SettingService;
|
|
||||||
use App\Models\Course as CourseModel;
|
use App\Models\Course as CourseModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,13 +85,10 @@ class ChapterController extends Controller
|
|||||||
$contentService = new ChapterContentService();
|
$contentService = new ChapterContentService();
|
||||||
$chapterService = new ChapterService();
|
$chapterService = new ChapterService();
|
||||||
$courseService = new CourseService();
|
$courseService = new CourseService();
|
||||||
$settingService = new SettingService();
|
|
||||||
|
|
||||||
$chapter = $chapterService->getChapter($id);
|
$chapter = $chapterService->getChapter($id);
|
||||||
$course = $courseService->getCourse($chapter->course_id);
|
$course = $courseService->getCourse($chapter->course_id);
|
||||||
$storage = $settingService->getSectionSettings('storage');
|
|
||||||
|
|
||||||
$this->view->setVar('storage', $storage);
|
|
||||||
$this->view->setVar('chapter', $chapter);
|
$this->view->setVar('chapter', $chapter);
|
||||||
$this->view->setVar('course', $course);
|
$this->view->setVar('course', $course);
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ class SettingController extends Controller
|
|||||||
|
|
||||||
$site = $settingService->getSectionSettings($section);
|
$site = $settingService->getSectionSettings($section);
|
||||||
|
|
||||||
$site['base_url'] = $site['base_url'] ?: kg_site_base_url();
|
$site['url'] = $site['url'] ?: kg_site_url();
|
||||||
|
|
||||||
$this->view->setVar('site', $site);
|
$this->view->setVar('site', $site);
|
||||||
}
|
}
|
||||||
@ -67,7 +67,7 @@ class SettingController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function storageAction()
|
public function storageAction()
|
||||||
{
|
{
|
||||||
$section = 'storage';
|
$section = 'cos';
|
||||||
|
|
||||||
$settingService = new SettingService();
|
$settingService = new SettingService();
|
||||||
|
|
||||||
@ -81,9 +81,9 @@ class SettingController extends Controller
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$storage = $settingService->getSectionSettings($section);
|
$cos = $settingService->getSectionSettings($section);
|
||||||
|
|
||||||
$this->view->setVar('storage', $storage);
|
$this->view->setVar('cos', $cos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ class UploadController extends Controller
|
|||||||
if ($file) {
|
if ($file) {
|
||||||
return $this->jsonSuccess([
|
return $this->jsonSuccess([
|
||||||
'data' => [
|
'data' => [
|
||||||
'src' => $service->getCiImageUrl($file->path),
|
'src' => $service->getImageUrl($file->path),
|
||||||
'title' => $file->name,
|
'title' => $file->name,
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
@ -43,7 +43,7 @@ class UploadController extends Controller
|
|||||||
if ($file) {
|
if ($file) {
|
||||||
return $this->jsonSuccess([
|
return $this->jsonSuccess([
|
||||||
'data' => [
|
'data' => [
|
||||||
'src' => $service->getCiImageUrl($file->path),
|
'src' => $service->getImageUrl($file->path),
|
||||||
'title' => $file->name,
|
'title' => $file->name,
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
@ -64,7 +64,7 @@ class UploadController extends Controller
|
|||||||
if ($file) {
|
if ($file) {
|
||||||
return $this->jsonSuccess([
|
return $this->jsonSuccess([
|
||||||
'data' => [
|
'data' => [
|
||||||
'src' => $service->getCiImageUrl($file->path),
|
'src' => $service->getImageUrl($file->path),
|
||||||
'title' => $file->name,
|
'title' => $file->name,
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
@ -87,12 +87,8 @@ class Setting extends Service
|
|||||||
{
|
{
|
||||||
$protocol = ['http://', 'https://'];
|
$protocol = ['http://', 'https://'];
|
||||||
|
|
||||||
if (isset($settings['bucket_domain'])) {
|
if (isset($settings['domain'])) {
|
||||||
$settings['bucket_domain'] = str_replace($protocol, '', $settings['bucket_domain']);
|
$settings['domain'] = str_replace($protocol, '', $settings['domain']);
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($settings['ci_domain'])) {
|
|
||||||
$settings['ci_domain'] = str_replace($protocol, '', $settings['ci_domain']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->updateSectionSettings($section, $settings);
|
$this->updateSectionSettings($section, $settings);
|
||||||
@ -107,12 +103,10 @@ class Setting extends Service
|
|||||||
{
|
{
|
||||||
$protocol = ['http://', 'https://'];
|
$protocol = ['http://', 'https://'];
|
||||||
|
|
||||||
if (isset($settings['push_domain'])) {
|
if (in_array($section, ['live.push', 'live.pull'])) {
|
||||||
$settings['push_domain'] = str_replace($protocol, '', $settings['push_domain']);
|
if (isset($settings['domain'])) {
|
||||||
}
|
$settings['domain'] = str_replace($protocol, '', $settings['domain']);
|
||||||
|
}
|
||||||
if (isset($settings['pull_domain'])) {
|
|
||||||
$settings['pull_domain'] = str_replace($protocol, '', $settings['pull_domain']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->updateSectionSettings($section, $settings);
|
$this->updateSectionSettings($section, $settings);
|
||||||
|
@ -26,11 +26,11 @@
|
|||||||
{{ partial('chapter/edit_lesson_basic') }}
|
{{ partial('chapter/edit_lesson_basic') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-tab-item">
|
<div class="layui-tab-item">
|
||||||
{% if course.model == '1' %}
|
{% if course.model == 1 %}
|
||||||
{{ partial('chapter/edit_lesson_vod') }}
|
{{ partial('chapter/edit_lesson_vod') }}
|
||||||
{% elseif course.model == '2' %}
|
{% elseif course.model == 2 %}
|
||||||
{{ partial('chapter/edit_lesson_live') }}
|
{{ partial('chapter/edit_lesson_live') }}
|
||||||
{% elseif course.model == '3' %}
|
{% elseif course.model == 3 %}
|
||||||
{{ partial('chapter/edit_lesson_read') }}
|
{{ partial('chapter/edit_lesson_read') }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">网站URL</label>
|
<label class="layui-form-label">网站URL</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input class="layui-input" type="text" name="base_url" value="{{ site.base_url }}">
|
<input class="layui-input" type="text" name="url" value="{{ site.url }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
|
@ -9,26 +9,26 @@
|
|||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">空间名称</label>
|
<label class="layui-form-label">空间名称</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input class="layui-input" type="text" name="bucket_name" value="{{ storage.bucket_name }}" layui-verify="required">
|
<input class="layui-input" type="text" name="bucket" value="{{ cos.bucket }}" layui-verify="required">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">所在区域</label>
|
<label class="layui-form-label">所在区域</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input class="layui-input" type="text" name="bucket_region" value="{{ storage.bucket_region }}" layui-verify="required">
|
<input class="layui-input" type="text" name="region" value="{{ cos.region }}" layui-verify="required">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">访问协议</label>
|
<label class="layui-form-label">访问协议</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="radio" name="bucket_protocol" value="http" title="HTTP" {% if storage.bucket_protocol == "http" %}checked{% endif %}>
|
<input type="radio" name="protocol" value="http" title="HTTP" {% if cos.protocol == "http" %}checked{% endif %}>
|
||||||
<input type="radio" name="bucket_protocol" value="https" title="HTTPS" {% if storage.bucket_protocol == "https" %}checked{% endif %}>
|
<input type="radio" name="protocol" value="https" title="HTTPS" {% if cos.protocol == "https" %}checked{% endif %}>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">访问域名</label>
|
<label class="layui-form-label">访问域名</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input class="layui-input" type="text" name="bucket_domain" value="{{ storage.bucket_domain }}" lay-verify="required">
|
<input class="layui-input" type="text" name="domain" value="{{ cos.domain }}" lay-verify="required">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<fieldset class="layui-elem-field layui-field-title">
|
<fieldset class="layui-elem-field layui-field-title">
|
||||||
|
@ -151,14 +151,14 @@ class MyController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function groupsAction()
|
public function groupsAction()
|
||||||
{
|
{
|
||||||
$type = $this->request->getQuery('type', 'trim', 'joined');
|
$scope = $this->request->getQuery('scope', 'trim', 'joined');
|
||||||
|
|
||||||
$service = new MyGroupListService();
|
$service = new MyGroupListService();
|
||||||
|
|
||||||
$pager = $service->handle($type);
|
$pager = $service->handle($scope);
|
||||||
|
|
||||||
$this->view->pick('my/groups');
|
$this->view->pick('my/groups');
|
||||||
$this->view->setVar('type', $type);
|
$this->view->setVar('scope', $scope);
|
||||||
$this->view->setVar('pager', $pager);
|
$this->view->setVar('pager', $pager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ class PublicController extends \Phalcon\Mvc\Controller
|
|||||||
|
|
||||||
$service = new StorageService();
|
$service = new StorageService();
|
||||||
|
|
||||||
$location = $service->getCiImageUrl($file->path);
|
$location = $service->getImageUrl($file->path);
|
||||||
|
|
||||||
$this->response->redirect($location);
|
$this->response->redirect($location);
|
||||||
|
|
||||||
|
@ -18,12 +18,15 @@ class UploadController extends Controller
|
|||||||
{
|
{
|
||||||
$service = new StorageService();
|
$service = new StorageService();
|
||||||
|
|
||||||
$key = $service->uploadAvatarImage();
|
$file = $service->uploadAvatarImage();
|
||||||
|
|
||||||
$url = $service->getCiImageUrl($key);
|
if ($file) {
|
||||||
|
return $this->jsonSuccess([
|
||||||
if ($url) {
|
'data' => [
|
||||||
return $this->jsonSuccess(['data' => ['src' => $url, 'title' => '']]);
|
'src' => $service->getImageUrl($file->path),
|
||||||
|
'title' => $file->name,
|
||||||
|
]
|
||||||
|
]);
|
||||||
} else {
|
} else {
|
||||||
return $this->jsonError(['msg' => '上传文件失败']);
|
return $this->jsonError(['msg' => '上传文件失败']);
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ class Im extends Service
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ class Im extends Service
|
|||||||
|
|
||||||
$users = $userRepo->findByIds($ids);
|
$users = $userRepo->findByIds($ids);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$mapping = [];
|
$mapping = [];
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ class Im extends Service
|
|||||||
|
|
||||||
$groups = $groupRepo->findByIds($ids);
|
$groups = $groupRepo->findByIds($ids);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$mapping = [];
|
$mapping = [];
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ class ImGroup extends Service
|
|||||||
|
|
||||||
$users = $builder->getUsers($groups);
|
$users = $builder->getUsers($groups);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
{% set update_url = url({'for':'desktop.group.update','id':group.id}) %}
|
{% set update_url = url({'for':'desktop.igm.update','id':group.id}) %}
|
||||||
{% set name_readonly = group.type == 'course' ? 'readonly="readonly"' : '' %}
|
{% set name_readonly = group.type == 1 ? 'readonly="readonly"' : '' %}
|
||||||
|
|
||||||
<form class="layui-form" method="post" action="{{ update_url }}">
|
<form class="layui-form" method="post" action="{{ update_url }}">
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
{{ type_info(item.type) }}
|
{{ type_info(item.type) }}
|
||||||
<div class="avatar">
|
<div class="avatar">
|
||||||
<a href="{{ group_url }}" title="{{ item.about }}">
|
<a href="{{ group_url }}" title="{{ item.about }}">
|
||||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
<img src="{{ item.avatar }}!avatar_160" alt="{{ item.name }}">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="name layui-elip">
|
<div class="name layui-elip">
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
{{ type_info(group.type) }}
|
{{ type_info(group.type) }}
|
||||||
<div class="avatar">
|
<div class="avatar">
|
||||||
<a href="{{ group_url }}" title="{{ group.about }}" target="group">
|
<a href="{{ group_url }}" title="{{ group.about }}" target="group">
|
||||||
<img src="{{ group.avatar }}" alt="{{ group.name }}">
|
<img src="{{ group.avatar }}!avatar_160" alt="{{ group.name }}">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="name layui-elip">
|
<div class="name layui-elip">
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
{{ vip_info(user.vip) }}
|
{{ vip_info(user.vip) }}
|
||||||
<div class="avatar">
|
<div class="avatar">
|
||||||
<a href="{{ user_url }}" title="{{ user.about }}" target="user">
|
<a href="{{ user_url }}" title="{{ user.about }}" target="user">
|
||||||
<img src="{{ user.avatar }}" alt="{{ user.name }}">
|
<img src="{{ user.avatar }}!avatar_160" alt="{{ user.name }}">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="name layui-elip">
|
<div class="name layui-elip">
|
||||||
|
@ -4,10 +4,10 @@
|
|||||||
|
|
||||||
{{ partial('macros/group') }}
|
{{ partial('macros/group') }}
|
||||||
|
|
||||||
{% set joined_url = url({'for':'desktop.my.groups'},{'type':'joined'}) %}
|
{% set joined_url = url({'for':'desktop.my.groups'},{'scope':'joined'}) %}
|
||||||
{% set owned_url = url({'for':'desktop.my.groups'},{'type':'owned'}) %}
|
{% set owned_url = url({'for':'desktop.my.groups'},{'scope':'owned'}) %}
|
||||||
{% set joined_class = type == 'joined' ? 'layui-btn layui-btn-xs' : 'none' %}
|
{% set joined_class = scope == 'joined' ? 'layui-btn layui-btn-xs' : 'none' %}
|
||||||
{% set owned_class = type == 'owned' ? 'layui-btn layui-btn-xs' : 'none' %}
|
{% set owned_class = scope == 'owned' ? 'layui-btn layui-btn-xs' : 'none' %}
|
||||||
|
|
||||||
<div class="layout-main">
|
<div class="layout-main">
|
||||||
<div class="my-sidebar">{{ partial('my/menu') }}</div>
|
<div class="my-sidebar">{{ partial('my/menu') }}</div>
|
||||||
@ -18,7 +18,7 @@
|
|||||||
<a class="{{ owned_class }}" href="{{ owned_url }}">管理的</a>
|
<a class="{{ owned_class }}" href="{{ owned_url }}">管理的</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="my-group-wrap wrap">
|
<div class="my-group-wrap wrap">
|
||||||
{% if type == 'owned' %}
|
{% if scope == 'owned' %}
|
||||||
{{ partial('my/groups_owned') }}
|
{{ partial('my/groups_owned') }}
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ partial('my/groups_joined') }}
|
{{ partial('my/groups_joined') }}
|
||||||
|
@ -2,14 +2,14 @@
|
|||||||
<div class="user-list teacher-list clearfix">
|
<div class="user-list teacher-list clearfix">
|
||||||
<div class="layui-row layui-col-space20">
|
<div class="layui-row layui-col-space20">
|
||||||
{% for item in pager.items %}
|
{% for item in pager.items %}
|
||||||
{% set item.title = item.title ? item.title : '暂露头角' %}
|
{% set item.title = item.title ? item.title : '小小教书匠' %}
|
||||||
{% set item.about = item.about ? item.about : '这个人很懒,什么都没留下' %}
|
{% set item.about = item.about ? item.about : '这个人很懒,什么都没留下' %}
|
||||||
{% set user_url = url({'for':'desktop.teacher.show','id':item.id}) %}
|
{% set user_url = url({'for':'desktop.teacher.show','id':item.id}) %}
|
||||||
<div class="layui-col-md2">
|
<div class="layui-col-md2">
|
||||||
<div class="user-card">
|
<div class="user-card">
|
||||||
<div class="avatar">
|
<div class="avatar">
|
||||||
<a href="{{ user_url }}" title="{{ item.about }}">
|
<a href="{{ user_url }}" title="{{ item.about }}">
|
||||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
<img src="{{ item.avatar }}!avatar_160" alt="{{ item.name }}">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="name layui-elip">
|
<div class="name layui-elip">
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
{{ vip_info(item.vip) }}
|
{{ vip_info(item.vip) }}
|
||||||
<div class="avatar">
|
<div class="avatar">
|
||||||
<a href="{{ user_url }}" title="{{ item.about }}">
|
<a href="{{ user_url }}" title="{{ item.about }}">
|
||||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
<img src="{{ item.avatar }}!avatar_160" alt="{{ item.name }}">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="name layui-elip">
|
<div class="name layui-elip">
|
||||||
|
@ -121,7 +121,7 @@ function kg_ip2region($ip, $dbFile = null)
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function kg_site_base_url()
|
function kg_site_url()
|
||||||
{
|
{
|
||||||
$scheme = filter_input(INPUT_SERVER, 'REQUEST_SCHEME');
|
$scheme = filter_input(INPUT_SERVER, 'REQUEST_SCHEME');
|
||||||
$host = filter_input(INPUT_SERVER, 'HTTP_HOST');
|
$host = filter_input(INPUT_SERVER, 'HTTP_HOST');
|
||||||
@ -168,25 +168,25 @@ function kg_default_cover_path()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取数据万象基准URL
|
* 获取存储基准URL
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function kg_ci_base_url()
|
function kg_ss_url()
|
||||||
{
|
{
|
||||||
$storage = new StorageService();
|
$storage = new StorageService();
|
||||||
|
|
||||||
return $storage->getCiBaseUrl();
|
return $storage->getBaseUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取数据万象URL
|
* 获取存储图片URL
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @param string $style
|
* @param string $style
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function kg_ci_img_url($path, $style = null)
|
function kg_ss_img_url($path, $style = null)
|
||||||
{
|
{
|
||||||
if (!$path) return '';
|
if (!$path) return '';
|
||||||
|
|
||||||
@ -196,35 +196,35 @@ function kg_ci_img_url($path, $style = null)
|
|||||||
|
|
||||||
$storage = new StorageService();
|
$storage = new StorageService();
|
||||||
|
|
||||||
return $storage->getCiImageUrl($path, $style);
|
return $storage->getImageUrl($path, $style);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取头像数据万象URL
|
* 获取头像URL
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @param string $style
|
* @param string $style
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function kg_ci_avatar_img_url($path, $style = null)
|
function kg_ss_avatar_url($path, $style = null)
|
||||||
{
|
{
|
||||||
$path = $path ?: kg_default_avatar_path();
|
$path = $path ?: kg_default_avatar_path();
|
||||||
|
|
||||||
return kg_ci_img_url($path, $style);
|
return kg_ss_img_url($path, $style);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取封面数据万象URL
|
* 获取封面URL
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @param string $style
|
* @param string $style
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function kg_ci_cover_img_url($path, $style = null)
|
function kg_ss_cover_url($path, $style = null)
|
||||||
{
|
{
|
||||||
$path = $path ?: kg_default_cover_path();
|
$path = $path ?: kg_default_cover_path();
|
||||||
|
|
||||||
return kg_ci_img_url($path, $style);
|
return kg_ss_img_url($path, $style);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -432,7 +432,7 @@ function kg_full_url($uri, $args = null)
|
|||||||
*/
|
*/
|
||||||
$url = Di::getDefault()->getShared('url');
|
$url = Di::getDefault()->getShared('url');
|
||||||
|
|
||||||
$baseUrl = kg_site_base_url();
|
$baseUrl = kg_site_url();
|
||||||
|
|
||||||
return $baseUrl . $url->get($uri, $args);
|
return $baseUrl . $url->get($uri, $args);
|
||||||
}
|
}
|
@ -158,7 +158,7 @@ class Carousel extends Model
|
|||||||
public function afterFetch()
|
public function afterFetch()
|
||||||
{
|
{
|
||||||
if (!Text::startsWith($this->cover, 'http')) {
|
if (!Text::startsWith($this->cover, 'http')) {
|
||||||
$this->cover = kg_ci_cover_img_url($this->cover);
|
$this->cover = kg_ss_cover_url($this->cover);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_string($this->style) && !empty($this->style)) {
|
if (is_string($this->style) && !empty($this->style)) {
|
||||||
|
@ -338,7 +338,7 @@ class Course extends Model
|
|||||||
$this->score = (float)$this->score;
|
$this->score = (float)$this->score;
|
||||||
|
|
||||||
if (!Text::startsWith($this->cover, 'http')) {
|
if (!Text::startsWith($this->cover, 'http')) {
|
||||||
$this->cover = kg_ci_cover_img_url($this->cover);
|
$this->cover = kg_ss_cover_url($this->cover);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_string($this->attrs) && !empty($this->attrs)) {
|
if (is_string($this->attrs) && !empty($this->attrs)) {
|
||||||
|
@ -156,7 +156,7 @@ class ImGroup extends Model
|
|||||||
public function afterFetch()
|
public function afterFetch()
|
||||||
{
|
{
|
||||||
if (!Text::startsWith($this->avatar, 'http')) {
|
if (!Text::startsWith($this->avatar, 'http')) {
|
||||||
$this->avatar = kg_ci_avatar_img_url($this->avatar);
|
$this->avatar = kg_ss_avatar_url($this->avatar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ class ImUser extends Model
|
|||||||
public function afterFetch()
|
public function afterFetch()
|
||||||
{
|
{
|
||||||
if (!Text::startsWith($this->avatar, 'http')) {
|
if (!Text::startsWith($this->avatar, 'http')) {
|
||||||
$this->avatar = kg_ci_avatar_img_url($this->avatar);
|
$this->avatar = kg_ss_avatar_url($this->avatar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ class User extends Model
|
|||||||
public function afterFetch()
|
public function afterFetch()
|
||||||
{
|
{
|
||||||
if (!Text::startsWith($this->avatar, 'http')) {
|
if (!Text::startsWith($this->avatar, 'http')) {
|
||||||
$this->avatar = kg_ci_avatar_img_url($this->avatar);
|
$this->avatar = kg_ss_avatar_url($this->avatar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ class Volt extends Provider
|
|||||||
return 'kg_js_include(' . $resolvedArgs . ')';
|
return 'kg_js_include(' . $resolvedArgs . ')';
|
||||||
});
|
});
|
||||||
|
|
||||||
$compiler->addFunction('ci_img_url', function ($resolvedArgs) {
|
$compiler->addFunction('ss_img_url', function ($resolvedArgs) {
|
||||||
return 'kg_ci_img_url(' . $resolvedArgs . ')';
|
return 'kg_ss_img_url(' . $resolvedArgs . ')';
|
||||||
});
|
});
|
||||||
|
|
||||||
$compiler->addFunction('substr', function ($resolvedArgs) {
|
$compiler->addFunction('substr', function ($resolvedArgs) {
|
||||||
|
@ -57,7 +57,7 @@ class CourseList extends FrontendService
|
|||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
foreach ($courses as $course) {
|
foreach ($courses as $course) {
|
||||||
|
|
||||||
|
@ -11,13 +11,13 @@ use App\Services\Frontend\User\GroupList as UserGroupListService;
|
|||||||
class GroupList extends FrontendService
|
class GroupList extends FrontendService
|
||||||
{
|
{
|
||||||
|
|
||||||
public function handle($type)
|
public function handle($scope)
|
||||||
{
|
{
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
if ($type == 'joined') {
|
if ($scope == 'joined') {
|
||||||
$result = $this->handleJoinedGroups();
|
$result = $this->handleJoinedGroups();
|
||||||
} elseif ($type == 'owned') {
|
} elseif ($scope == 'owned') {
|
||||||
$result = $this->handleOwnedGroups();
|
$result = $this->handleOwnedGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ class GroupList extends FrontendService
|
|||||||
|
|
||||||
$users = $builder->getUsers($groups);
|
$users = $builder->getUsers($groups);
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ class ProfileInfo extends FrontendService
|
|||||||
|
|
||||||
protected function handleUser(UserModel $user)
|
protected function handleUser(UserModel $user)
|
||||||
{
|
{
|
||||||
$user->avatar = kg_ci_img_url($user->avatar);
|
$user->avatar = kg_ss_avatar_url($user->avatar);
|
||||||
|
|
||||||
$user->area = $this->handleArea($user->area);
|
$user->area = $this->handleArea($user->area);
|
||||||
|
|
||||||
|
@ -91,14 +91,14 @@ class OrderInfo extends FrontendService
|
|||||||
|
|
||||||
protected function handleCourseInfo($itemInfo)
|
protected function handleCourseInfo($itemInfo)
|
||||||
{
|
{
|
||||||
$itemInfo['course']['cover'] = kg_ci_img_url($itemInfo['course']['cover']);
|
$itemInfo['course']['cover'] = kg_ss_cover_url($itemInfo['course']['cover']);
|
||||||
|
|
||||||
return $itemInfo;
|
return $itemInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handlePackageInfo($itemInfo)
|
protected function handlePackageInfo($itemInfo)
|
||||||
{
|
{
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
foreach ($itemInfo['courses'] as &$course) {
|
foreach ($itemInfo['courses'] as &$course) {
|
||||||
$course['cover'] = $baseUrl . $course['cover'];
|
$course['cover'] = $baseUrl . $course['cover'];
|
||||||
|
@ -40,7 +40,7 @@ class TeacherList extends FrontendService
|
|||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ class CourseList extends FrontendService
|
|||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
foreach ($pager->items->toArray() as $course) {
|
foreach ($pager->items->toArray() as $course) {
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ class CourseList extends FrontendService
|
|||||||
|
|
||||||
$courses = $pager->items->toArray();
|
$courses = $pager->items->toArray();
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ class UserList extends FrontendService
|
|||||||
|
|
||||||
$users = $pager->items->toArray();
|
$users = $pager->items->toArray();
|
||||||
|
|
||||||
$baseUrl = kg_ci_base_url();
|
$baseUrl = kg_ss_url();
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ class WxpayGateway extends Service
|
|||||||
'mch_id' => $this->settings['mch_id'],
|
'mch_id' => $this->settings['mch_id'],
|
||||||
'key' => $this->settings['key'],
|
'key' => $this->settings['key'],
|
||||||
'notify_url' => $this->settings['notify_url'],
|
'notify_url' => $this->settings['notify_url'],
|
||||||
|
'cert_client' => '',
|
||||||
|
'cert_key' => '',
|
||||||
'log' => [
|
'log' => [
|
||||||
'file' => log_path('wxpay.log'),
|
'file' => log_path('wxpay.log'),
|
||||||
'level' => $level,
|
'level' => $level,
|
||||||
|
@ -32,7 +32,7 @@ class Refund extends Service
|
|||||||
*/
|
*/
|
||||||
$itemInfo = $order->item_info;
|
$itemInfo = $order->item_info;
|
||||||
|
|
||||||
$itemInfo['course']['cover'] = kg_ci_cover_img_url($itemInfo['course']['cover']);
|
$itemInfo['course']['cover'] = kg_ss_cover_url($itemInfo['course']['cover']);
|
||||||
|
|
||||||
$refundPercent = 0.00;
|
$refundPercent = 0.00;
|
||||||
$refundAmount = 0.00;
|
$refundAmount = 0.00;
|
||||||
@ -72,7 +72,7 @@ class Refund extends Service
|
|||||||
*/
|
*/
|
||||||
foreach ($itemInfo['courses'] as &$course) {
|
foreach ($itemInfo['courses'] as &$course) {
|
||||||
|
|
||||||
$course['cover'] = kg_ci_cover_img_url($course['cover']);
|
$course['cover'] = kg_ss_cover_url($course['cover']);
|
||||||
|
|
||||||
$refundPercent = 0.00;
|
$refundPercent = 0.00;
|
||||||
$refundAmount = 0.00;
|
$refundAmount = 0.00;
|
||||||
|
@ -25,7 +25,7 @@ class Storage extends Service
|
|||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->settings = $this->getSectionSettings('storage');
|
$this->settings = $this->getSectionSettings('cos');
|
||||||
|
|
||||||
$this->logger = $this->getLogger('storage');
|
$this->logger = $this->getLogger('storage');
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ class Storage extends Service
|
|||||||
*/
|
*/
|
||||||
public function putString($key, $body)
|
public function putString($key, $body)
|
||||||
{
|
{
|
||||||
$bucket = $this->settings['bucket_name'];
|
$bucket = $this->settings['bucket'];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
@ -52,7 +52,6 @@ class Storage extends Service
|
|||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
$this->logger->error('Put String Exception ' . kg_json_encode([
|
$this->logger->error('Put String Exception ' . kg_json_encode([
|
||||||
'line' => $e->getLine(),
|
|
||||||
'code' => $e->getCode(),
|
'code' => $e->getCode(),
|
||||||
'message' => $e->getMessage(),
|
'message' => $e->getMessage(),
|
||||||
]));
|
]));
|
||||||
@ -72,7 +71,7 @@ class Storage extends Service
|
|||||||
*/
|
*/
|
||||||
public function putFile($key, $filename)
|
public function putFile($key, $filename)
|
||||||
{
|
{
|
||||||
$bucket = $this->settings['bucket_name'];
|
$bucket = $this->settings['bucket'];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
@ -85,7 +84,6 @@ class Storage extends Service
|
|||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
$this->logger->error('Put File Exception ' . kg_json_encode([
|
$this->logger->error('Put File Exception ' . kg_json_encode([
|
||||||
'line' => $e->getLine(),
|
|
||||||
'code' => $e->getCode(),
|
'code' => $e->getCode(),
|
||||||
'message' => $e->getMessage(),
|
'message' => $e->getMessage(),
|
||||||
]));
|
]));
|
||||||
@ -104,7 +102,7 @@ class Storage extends Service
|
|||||||
*/
|
*/
|
||||||
public function deleteObject($key)
|
public function deleteObject($key)
|
||||||
{
|
{
|
||||||
$bucket = $this->settings['bucket_name'];
|
$bucket = $this->settings['bucket'];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
@ -118,7 +116,6 @@ class Storage extends Service
|
|||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
$this->logger->error('Delete Object Exception ' . kg_json_encode([
|
$this->logger->error('Delete Object Exception ' . kg_json_encode([
|
||||||
'line' => $e->getLine(),
|
|
||||||
'code' => $e->getCode(),
|
'code' => $e->getCode(),
|
||||||
'message' => $e->getMessage(),
|
'message' => $e->getMessage(),
|
||||||
]));
|
]));
|
||||||
@ -130,52 +127,39 @@ class Storage extends Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取存储桶文件URL
|
* 获取文件URL
|
||||||
*
|
*
|
||||||
* @param string $key
|
* @param string $key
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getBucketFileUrl($key)
|
public function getFileUrl($key)
|
||||||
{
|
{
|
||||||
return $this->getBucketBaseUrl() . $key;
|
return $this->getBaseUrl() . $key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取数据万象图片URL
|
* 获取图片URL
|
||||||
*
|
*
|
||||||
* @param string $key
|
* @param string $key
|
||||||
* @param string $style
|
* @param string $style
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getCiImageUrl($key, $style = null)
|
public function getImageUrl($key, $style = null)
|
||||||
{
|
{
|
||||||
$style = $style ?: '';
|
$style = $style ?: '';
|
||||||
|
|
||||||
return $this->getCiBaseUrl() . $key . $style;
|
return $this->getBaseUrl() . $key . $style;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取存储桶根URL
|
* 获取基准URL
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getBucketBaseUrl()
|
public function getBaseUrl()
|
||||||
{
|
{
|
||||||
$protocol = $this->settings['bucket_protocol'];
|
$protocol = $this->settings['protocol'];
|
||||||
$domain = $this->settings['bucket_domain'];
|
$domain = $this->settings['domain'];
|
||||||
|
|
||||||
return sprintf('%s://%s', $protocol, trim($domain, '/'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取数据万象根URL
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getCiBaseUrl()
|
|
||||||
{
|
|
||||||
$protocol = $this->settings['ci_protocol'];
|
|
||||||
$domain = $this->settings['ci_domain'];
|
|
||||||
|
|
||||||
return sprintf('%s://%s', $protocol, trim($domain, '/'));
|
return sprintf('%s://%s', $protocol, trim($domain, '/'));
|
||||||
}
|
}
|
||||||
@ -217,8 +201,8 @@ class Storage extends Service
|
|||||||
$secret = $this->getSectionSettings('secret');
|
$secret = $this->getSectionSettings('secret');
|
||||||
|
|
||||||
return new CosClient([
|
return new CosClient([
|
||||||
'region' => $this->settings['bucket_region'],
|
'region' => $this->settings['region'],
|
||||||
'schema' => $this->settings['bucket_protocol'],
|
'schema' => $this->settings['protocol'],
|
||||||
'credentials' => [
|
'credentials' => [
|
||||||
'secretId' => $secret['secret_id'],
|
'secretId' => $secret['secret_id'],
|
||||||
'secretKey' => $secret['secret_key'],
|
'secretKey' => $secret['secret_key'],
|
||||||
|
@ -10,6 +10,11 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
$rows = [
|
$rows = [
|
||||||
|
[
|
||||||
|
'section' => 'captcha',
|
||||||
|
'item_key' => 'enabled',
|
||||||
|
'item_value' => '0',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'section' => 'captcha',
|
'section' => 'captcha',
|
||||||
'item_key' => 'app_id',
|
'item_key' => 'app_id',
|
||||||
@ -21,7 +26,7 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'captcha',
|
'section' => 'im.cs',
|
||||||
'item_key' => 'enabled',
|
'item_key' => 'enabled',
|
||||||
'item_value' => '0',
|
'item_value' => '0',
|
||||||
],
|
],
|
||||||
@ -32,8 +37,8 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'im.cs',
|
'section' => 'im.cs',
|
||||||
'item_key' => 'enabled',
|
'item_key' => 'user2_id',
|
||||||
'item_value' => '0',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'im.cs',
|
'section' => 'im.cs',
|
||||||
@ -41,20 +46,15 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'im.cs',
|
'section' => 'im.main',
|
||||||
'item_key' => 'user2_id',
|
'item_key' => 'title',
|
||||||
'item_value' => '',
|
'item_value' => '菜鸟驿站',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'im.main',
|
'section' => 'im.main',
|
||||||
'item_key' => 'msg_max_length',
|
'item_key' => 'msg_max_length',
|
||||||
'item_value' => '1000',
|
'item_value' => '1000',
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'section' => 'im.main',
|
|
||||||
'item_key' => 'title',
|
|
||||||
'item_value' => '菜鸟驿站',
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'section' => 'im.main',
|
'section' => 'im.main',
|
||||||
'item_key' => 'upload_img_enabled',
|
'item_key' => 'upload_img_enabled',
|
||||||
@ -170,6 +170,11 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
'item_key' => 'smtp_encryption',
|
'item_key' => 'smtp_encryption',
|
||||||
'item_value' => 'ssl',
|
'item_value' => 'ssl',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'section' => 'mailer',
|
||||||
|
'item_key' => 'smtp_authentication',
|
||||||
|
'item_value' => '1',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'section' => 'mailer',
|
'section' => 'mailer',
|
||||||
'item_key' => 'smtp_username',
|
'item_key' => 'smtp_username',
|
||||||
@ -191,10 +196,15 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
'item_value' => 'ABC有限公司',
|
'item_value' => 'ABC有限公司',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'mailer',
|
'section' => 'pay.alipay',
|
||||||
'item_key' => 'smtp_authentication',
|
'item_key' => 'enabled',
|
||||||
'item_value' => '1',
|
'item_value' => '1',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'section' => 'pay.alipay',
|
||||||
|
'item_key' => 'app_id',
|
||||||
|
'item_value' => '',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'section' => 'pay.alipay',
|
'section' => 'pay.alipay',
|
||||||
'item_key' => 'public_key',
|
'item_key' => 'public_key',
|
||||||
@ -207,34 +217,19 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'pay.alipay',
|
'section' => 'pay.alipay',
|
||||||
|
'item_key' => 'return_url',
|
||||||
|
'item_value' => '',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'pay.alipay',
|
||||||
|
'item_key' => 'notify_url',
|
||||||
|
'item_value' => '',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'pay.wxpay',
|
||||||
'item_key' => 'enabled',
|
'item_key' => 'enabled',
|
||||||
'item_value' => '1',
|
'item_value' => '1',
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'section' => 'pay.alipay',
|
|
||||||
'item_key' => 'return_url',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'pay.alipay',
|
|
||||||
'item_key' => 'notify_url',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'pay.alipay',
|
|
||||||
'item_key' => 'app_id',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'pay.wxpay',
|
|
||||||
'item_key' => 'notify_url',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'pay.wxpay',
|
|
||||||
'item_key' => 'return_url',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'section' => 'pay.wxpay',
|
'section' => 'pay.wxpay',
|
||||||
'item_key' => 'app_id',
|
'item_key' => 'app_id',
|
||||||
@ -252,8 +247,13 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'pay.wxpay',
|
'section' => 'pay.wxpay',
|
||||||
'item_key' => 'enabled',
|
'item_key' => 'notify_url',
|
||||||
'item_value' => '1',
|
'item_value' => '',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'pay.wxpay',
|
||||||
|
'item_key' => 'return_url',
|
||||||
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'secret',
|
'section' => 'secret',
|
||||||
@ -270,6 +270,11 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
'item_key' => 'app_id',
|
'item_key' => 'app_id',
|
||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'section' => 'site',
|
||||||
|
'item_key' => 'title',
|
||||||
|
'item_value' => '酷瓜云课堂',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'section' => 'site',
|
'section' => 'site',
|
||||||
'item_key' => 'keywords',
|
'item_key' => 'keywords',
|
||||||
@ -277,9 +282,29 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'site',
|
'section' => 'site',
|
||||||
'item_key' => 'analytics',
|
'item_key' => 'description',
|
||||||
|
'item_value' => '酷瓜云课堂,依托腾讯云基础服务,使用C扩展框架PHALCON开发',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'site',
|
||||||
|
'item_key' => 'url',
|
||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'section' => 'site',
|
||||||
|
'item_key' => 'enabled',
|
||||||
|
'item_value' => '1',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'site',
|
||||||
|
'item_key' => 'closed_tips',
|
||||||
|
'item_value' => '站点维护中,请稍后再访问。',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'site',
|
||||||
|
'item_key' => 'copyright',
|
||||||
|
'item_value' => '2016-2020 深圳市酷瓜软件有限公司',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'section' => 'site',
|
'section' => 'site',
|
||||||
'item_key' => 'icp_sn',
|
'item_key' => 'icp_sn',
|
||||||
@ -302,34 +327,9 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'site',
|
'section' => 'site',
|
||||||
'item_key' => 'copyright',
|
'item_key' => 'analytics',
|
||||||
'item_value' => '2016-2020 深圳市酷瓜软件有限公司',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'site',
|
|
||||||
'item_key' => 'base_url',
|
|
||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'section' => 'site',
|
|
||||||
'item_key' => 'enabled',
|
|
||||||
'item_value' => '1',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'site',
|
|
||||||
'item_key' => 'closed_tips',
|
|
||||||
'item_value' => '站点维护中,请稍后再访问。',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'site',
|
|
||||||
'item_key' => 'description',
|
|
||||||
'item_value' => '酷瓜云课堂,依托腾讯云基础服务,使用C扩展框架PHALCON开发',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'site',
|
|
||||||
'item_key' => 'title',
|
|
||||||
'item_value' => '酷瓜云课堂',
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'section' => 'smser',
|
'section' => 'smser',
|
||||||
'item_key' => 'app_id',
|
'item_key' => 'app_id',
|
||||||
@ -337,8 +337,8 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'smser',
|
'section' => 'smser',
|
||||||
'item_key' => 'template',
|
'item_key' => 'app_key',
|
||||||
'item_value' => '{"verify":{"id":"561282","content":"验证码:{1},{2} 分钟内有效,如非本人操作请忽略。"},"order":{"id":"561954","content":"下单成功,商品名称:{1},订单序号:{2},订单金额:¥{3}"},"refund":{"id":"561286","content":"退款成功,商品名称:{1},订单序号:{2},退款金额:¥{3}"},"live":{"id":"561288","content":"直播预告,课程名称:{1},章节名称:{2},开播时间:{3}"}}',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'smser',
|
'section' => 'smser',
|
||||||
@ -347,64 +347,29 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'smser',
|
'section' => 'smser',
|
||||||
'item_key' => 'app_key',
|
'item_key' => 'template',
|
||||||
|
'item_value' => '{"verify":{"id":"561282","content":"验证码:{1},{2} 分钟内有效,如非本人操作请忽略。"},"order":{"id":"561954","content":"下单成功,商品名称:{1},订单序号:{2},订单金额:¥{3}"},"refund":{"id":"561286","content":"退款成功,商品名称:{1},订单序号:{2},退款金额:¥{3}"},"live":{"id":"561288","content":"直播预告,课程名称:{1},章节名称:{2},开播时间:{3}"}}',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'cos',
|
||||||
|
'item_key' => 'bucket',
|
||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'storage',
|
'section' => 'cos',
|
||||||
'item_key' => 'ci_protocol',
|
'item_key' => 'region',
|
||||||
|
'item_value' => '',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'cos',
|
||||||
|
'item_key' => 'protocol',
|
||||||
'item_value' => 'https',
|
'item_value' => 'https',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'storage',
|
'section' => 'cos',
|
||||||
'item_key' => 'bucket_name',
|
'item_key' => 'domain',
|
||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'section' => 'storage',
|
|
||||||
'item_key' => 'ci_domain',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'storage',
|
|
||||||
'item_key' => 'bucket_region',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'storage',
|
|
||||||
'item_key' => 'bucket_protocol',
|
|
||||||
'item_value' => 'https',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'storage',
|
|
||||||
'item_key' => 'bucket_domain',
|
|
||||||
'item_value' => '',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'vod',
|
|
||||||
'item_key' => 'dist_protocol',
|
|
||||||
'item_value' => 'https',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'vod',
|
|
||||||
'item_key' => 'watermark_enabled',
|
|
||||||
'item_value' => '1',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'vod',
|
|
||||||
'item_key' => 'watermark_template',
|
|
||||||
'item_value' => '462027',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'vod',
|
|
||||||
'item_key' => 'audio_format',
|
|
||||||
'item_value' => 'mp3',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'section' => 'vod',
|
|
||||||
'item_key' => 'video_format',
|
|
||||||
'item_value' => 'hls',
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'section' => 'vod',
|
'section' => 'vod',
|
||||||
'item_key' => 'storage_type',
|
'item_key' => 'storage_type',
|
||||||
@ -417,14 +382,39 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'vod',
|
'section' => 'vod',
|
||||||
'item_key' => 'key_anti_ip_limit',
|
'item_key' => 'audio_format',
|
||||||
'item_value' => '',
|
'item_value' => 'mp3',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'vod',
|
||||||
|
'item_key' => 'video_format',
|
||||||
|
'item_value' => 'hls',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'vod',
|
||||||
|
'item_key' => 'watermark_enabled',
|
||||||
|
'item_value' => '1',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'vod',
|
||||||
|
'item_key' => 'watermark_template',
|
||||||
|
'item_value' => '462027',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'section' => 'vod',
|
||||||
|
'item_key' => 'dist_protocol',
|
||||||
|
'item_value' => 'https',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'vod',
|
'section' => 'vod',
|
||||||
'item_key' => 'dist_domain',
|
'item_key' => 'dist_domain',
|
||||||
'item_value' => '',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'section' => 'vod',
|
||||||
|
'item_key' => 'key_anti_enabled',
|
||||||
|
'item_value' => '1',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'section' => 'vod',
|
'section' => 'vod',
|
||||||
'item_key' => 'key_anti_key',
|
'item_key' => 'key_anti_key',
|
||||||
@ -437,8 +427,8 @@ final class InsertSettingData extends AbstractMigration
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'section' => 'vod',
|
'section' => 'vod',
|
||||||
'item_key' => 'key_anti_enabled',
|
'item_key' => 'key_anti_ip_limit',
|
||||||
'item_value' => '1',
|
'item_value' => '',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user