mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-16 13:16:14 +08:00
设计migration
This commit is contained in:
parent
aa66660e47
commit
1faf364d54
@ -3,6 +3,7 @@
|
||||
namespace App\Caches;
|
||||
|
||||
use App\Builders\NavTreeList as NavTreeListBuilder;
|
||||
use App\Models\Nav as NavModel;
|
||||
|
||||
class NavTreeList extends Cache
|
||||
{
|
||||
@ -24,8 +25,8 @@ class NavTreeList extends Cache
|
||||
$builder = new NavTreeListBuilder();
|
||||
|
||||
return [
|
||||
'top' => $builder->handle('top'),
|
||||
'bottom' => $builder->handle('bottom'),
|
||||
'top' => $builder->handle(NavModel::POS_TOP),
|
||||
'bottom' => $builder->handle(NavModel::POS_BOTTOM),
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Http\Admin\Controllers;
|
||||
|
||||
use App\Http\Admin\Services\Category as CategoryService;
|
||||
use App\Models\Category as CategoryModel;
|
||||
|
||||
/**
|
||||
* @RoutePrefix("/admin/category")
|
||||
@ -16,7 +17,7 @@ class CategoryController extends Controller
|
||||
public function listAction()
|
||||
{
|
||||
$parentId = $this->request->get('parent_id', 'int', 0);
|
||||
$type = $this->request->get('type', 'string', 'course');
|
||||
$type = $this->request->get('type', 'string', CategoryModel::TYPE_COURSE);
|
||||
|
||||
$categoryService = new CategoryService();
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Http\Admin\Controllers;
|
||||
|
||||
use App\Http\Admin\Services\Course as CourseService;
|
||||
use App\Models\Category as CategoryModel;
|
||||
|
||||
/**
|
||||
* @RoutePrefix("/admin/course")
|
||||
@ -17,8 +18,8 @@ class CourseController extends Controller
|
||||
{
|
||||
$location = $this->url->get(
|
||||
['for' => 'admin.category.list'],
|
||||
['type' => 'course'],
|
||||
);
|
||||
['type' => CategoryModel::TYPE_COURSE]
|
||||
);
|
||||
|
||||
return $this->response->redirect($location);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Http\Admin\Controllers;
|
||||
|
||||
use App\Http\Admin\Services\Help as HelpService;
|
||||
use App\Models\Category as CategoryModel;
|
||||
|
||||
/**
|
||||
* @RoutePrefix("/admin/help")
|
||||
@ -17,8 +18,8 @@ class HelpController extends Controller
|
||||
{
|
||||
$location = $this->url->get(
|
||||
['for' => 'admin.category.list'],
|
||||
['type' => 'help'],
|
||||
);
|
||||
['type' => CategoryModel::TYPE_HELP]
|
||||
);
|
||||
|
||||
return $this->response->redirect($location);
|
||||
}
|
||||
|
@ -283,28 +283,25 @@ class SettingController extends Controller
|
||||
*/
|
||||
public function imAction()
|
||||
{
|
||||
$section = 'im';
|
||||
|
||||
$settingService = new SettingService();
|
||||
|
||||
if ($this->request->isPost()) {
|
||||
|
||||
$section = $this->request->getPost('section');
|
||||
|
||||
$data = $this->request->getPost();
|
||||
|
||||
$settingService->updateSectionSettings($section, $data);
|
||||
|
||||
$content = [
|
||||
'location' => $this->request->getHTTPReferer(),
|
||||
'msg' => '更新配置成功',
|
||||
];
|
||||
|
||||
return $this->jsonSuccess($content);
|
||||
return $this->jsonSuccess(['msg' => '更新配置成功']);
|
||||
|
||||
} else {
|
||||
|
||||
$im = $settingService->getSectionSettings($section);
|
||||
$main = $settingService->getSectionSettings('im.main');
|
||||
$cs = $settingService->getSectionSettings('im.cs');
|
||||
|
||||
$this->view->setVar('im', $im);
|
||||
$this->view->setVar('main', $main);
|
||||
$this->view->setVar('cs', $cs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show">
|
||||
{{ partial('setting/im_basic') }}
|
||||
{{ partial('setting/im_main') }}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{{ partial('setting/im_cs') }}
|
||||
|
@ -1,15 +0,0 @@
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.im'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">应用名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="title" value="{{ im.title }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
|
||||
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
@ -2,26 +2,26 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">开启服务</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="cs_enabled" value="1" title="是" lay-filter="status" {% if im.cs_enabled == 1 %}checked{% endif %}>
|
||||
<input type="radio" name="cs_enabled" value="0" title="否" lay-filter="status" {% if im.cs_enabled == 0 %}checked{% endif %}>
|
||||
<input type="radio" name="enabled" value="1" title="是" lay-filter="status" {% if cs.enabled == 1 %}checked{% endif %}>
|
||||
<input type="radio" name="enabled" value="0" title="否" lay-filter="status" {% if cs.enabled == 0 %}checked{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">客服1用户编号</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="cs_user1_id" value="{{ im.cs_user1_id }}" layui-verify="required">
|
||||
<input class="layui-input" type="text" name="user1_id" value="{{ cs.user1_id }}" layui-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">客服2用户编号</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="cs_user2_id" value="{{ im.cs_user2_id }}">
|
||||
<input class="layui-input" type="text" name="user2_id" value="{{ cs.user2_id }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">客服3用户编号</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="cs_user3_id" value="{{ im.cs_user3_id }}">
|
||||
<input class="layui-input" type="text" name="user3_id" value="{{ cs.user3_id }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -29,6 +29,7 @@
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
|
||||
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
|
||||
<input type="hidden" name="section" value="im.cs">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
50
app/Http/Admin/Views/setting/im_main.volt
Normal file
50
app/Http/Admin/Views/setting/im_main.volt
Normal file
@ -0,0 +1,50 @@
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.im'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">应用名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="title" value="{{ main.title }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">消息最大长度</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="msg_max_length" value="{{ main.msg_max_length }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">开启图片上传</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="upload_img_enabled" value="1" title="是" {% if main.upload_img_enabled == "1" %}checked{% endif %}>
|
||||
<input type="radio" name="upload_img_enabled" value="0" title="否" {% if main.upload_img_enabled == "0" %}checked{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">开启文件上传</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="upload_file_enabled" value="1" title="是" {% if main.upload_file_enabled == "1" %}checked{% endif %}>
|
||||
<input type="radio" name="upload_file_enabled" value="0" title="否" {% if main.upload_file_enabled == "0" %}checked{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">开启音频栏</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="tool_audio_enabled" value="1" title="是" {% if main.tool_audio_enabled == "1" %}checked{% endif %}>
|
||||
<input type="radio" name="tool_audio_enabled" value="0" title="否" {% if main.tool_audio_enabled == "0" %}checked{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">开启视频栏</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="tool_video_enabled" value="1" title="是" {% if main.tool_video_enabled == "1" %}checked{% endif %}>
|
||||
<input type="radio" name="tool_video_enabled" value="0" title="否" {% if main.tool_video_enabled == "0" %}checked{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
|
||||
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
|
||||
<input type="hidden" name="section" value="im.main">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
@ -19,7 +19,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">关闭原因</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="closed_tips" class="layui-textarea">{{ site.closed_tips }}</textarea>
|
||||
<input class="layui-input" type="text" name="closed_tips" value="{{ site.closed_tips }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -32,7 +32,7 @@
|
||||
<label class="layui-form-label">视频格式</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="video_format" value="hls" title="HLS" lay-filter="video_format" {% if vod.video_format == "hls" %}checked{% endif %}>
|
||||
<input type="radio" name="video_format" value="mp4" title="MP4" lay-filter="video_format" {% if vod.video_format == "mp4" %}checked{% endif %}>
|
||||
<input type="radio" name="video_format" value="mp4" title="MP4" disabled="disabled" lay-filter="video_format" {% if vod.video_format == "mp4" %}checked{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -44,8 +44,8 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">音频格式</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="audio_format" value="m4a" title="M4A" lay-filter="audio_format" {% if vod.audio_format == "m4a" %}checked{% endif %}>
|
||||
<input type="radio" name="audio_format" value="mp3" title="MP3" lay-filter="audio_format" {% if vod.audio_format == "mp3" %}checked{% endif %}>
|
||||
<input type="radio" name="audio_format" value="m4a" title="M4A" disabled="disabled" lay-filter="audio_format" {% if vod.audio_format == "m4a" %}checked{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -120,16 +120,10 @@ class Controller extends \Phalcon\Mvc\Controller
|
||||
{
|
||||
$cache = new SettingCache();
|
||||
|
||||
$im = $cache->get('im');
|
||||
|
||||
return [
|
||||
'title' => $im['title'],
|
||||
'cs' => [
|
||||
'enabled' => $im['cs_enabled'],
|
||||
],
|
||||
'websocket' => [
|
||||
'url' => $this->config->websocket->url,
|
||||
],
|
||||
'main' => $cache->get('im.main'),
|
||||
'cs' => $cache->get('im.cs'),
|
||||
'websocket' => $this->config->websocket,
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -1,21 +0,0 @@
|
||||
<script>
|
||||
|
||||
window.user = {
|
||||
id: '{{ auth_user.id }}',
|
||||
name: '{{ auth_user.name }}',
|
||||
avatar: '{{ auth_user.avatar }}',
|
||||
locked: '{{ auth_user.locked }}',
|
||||
vip: '{{ auth_user.vip }}'
|
||||
};
|
||||
|
||||
window.im = {
|
||||
title: '{{ im_info.title }}',
|
||||
cs: {
|
||||
enabled: '{{ im_info.cs.enabled }}'
|
||||
},
|
||||
websocket: {
|
||||
url: '{{ im_info.websocket.url }}'
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
28
app/Http/Desktop/Views/partials/js_vars.volt
Normal file
28
app/Http/Desktop/Views/partials/js_vars.volt
Normal file
@ -0,0 +1,28 @@
|
||||
<script>
|
||||
|
||||
window.user = {
|
||||
id: '{{ auth_user.id }}',
|
||||
name: '{{ auth_user.name }}',
|
||||
avatar: '{{ auth_user.avatar }}',
|
||||
locked: '{{ auth_user.locked }}',
|
||||
vip: '{{ auth_user.vip }}'
|
||||
};
|
||||
|
||||
window.im = {
|
||||
main: {
|
||||
title: '{{ im_info.main.title }}',
|
||||
upload_img_enabled: '{{ im_info.main.upload_img_enabled }}',
|
||||
upload_file_enabled: '{{ im_info.main.upload_file_enabled }}',
|
||||
tool_audio_enabled: '{{ im_info.main.tool_audio_enabled }}',
|
||||
tool_video_enabled: '{{ im_info.main.tool_video_enabled }}',
|
||||
msg_max_length: '{{ im_info.main.msg_max_length }}',
|
||||
},
|
||||
cs: {
|
||||
enabled: '{{ im_info.cs.enabled }}'
|
||||
},
|
||||
websocket: {
|
||||
url: '{{ im_info.websocket.url }}'
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
@ -15,7 +15,7 @@
|
||||
<body class="layer">
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
{{ partial('partials/js_global_vars') }}
|
||||
{{ partial('partials/js_vars') }}
|
||||
{{ js_include('lib/layui/layui.js') }}
|
||||
{{ js_include('desktop/js/common.js') }}
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
{{ partial('partials/footer') }}
|
||||
</div>
|
||||
|
||||
{{ partial('partials/js_global_vars') }}
|
||||
{{ partial('partials/js_vars') }}
|
||||
{{ js_include('lib/layui/layui.js') }}
|
||||
{{ js_include('desktop/js/common.js') }}
|
||||
|
||||
|
@ -28,6 +28,13 @@ class Category extends Model
|
||||
*/
|
||||
public $parent_id;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $level;
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*
|
||||
@ -42,20 +49,6 @@ class Category extends Model
|
||||
*/
|
||||
public $name;
|
||||
|
||||
/**
|
||||
* 优先级
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $priority;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $level;
|
||||
|
||||
/**
|
||||
* 路径
|
||||
*
|
||||
@ -63,6 +56,13 @@ class Category extends Model
|
||||
*/
|
||||
public $path;
|
||||
|
||||
/**
|
||||
* 优先级
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $priority;
|
||||
|
||||
/**
|
||||
* 发布标识
|
||||
*
|
||||
|
@ -16,9 +16,9 @@ class Danmu extends Model
|
||||
/**
|
||||
* 位置类型
|
||||
*/
|
||||
const POSITION_MOVE = 0; // 滚动
|
||||
const POSITION_TOP = 1; // 顶部
|
||||
const POSITION_BOTTOM = 2; // 底部
|
||||
const POS_MOVE = 0; // 滚动
|
||||
const POS_TOP = 1; // 顶部
|
||||
const POS_BOTTOM = 2; // 底部
|
||||
|
||||
/**
|
||||
* 颜色类型
|
||||
@ -159,12 +159,12 @@ class Danmu extends Model
|
||||
];
|
||||
}
|
||||
|
||||
public static function positionTypes()
|
||||
public static function posTypes()
|
||||
{
|
||||
return [
|
||||
self::POSITION_MOVE => '滚动',
|
||||
self::POSITION_TOP => '顶部',
|
||||
self::POSITION_BOTTOM => '底部',
|
||||
self::POS_MOVE => '滚动',
|
||||
self::POS_TOP => '顶部',
|
||||
self::POS_BOTTOM => '底部',
|
||||
];
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ class Danmu extends Model
|
||||
|
||||
public static function randPosition()
|
||||
{
|
||||
$types = self::positionTypes();
|
||||
$types = self::posTypes();
|
||||
|
||||
$keys = array_keys($types);
|
||||
$index = array_rand($keys);
|
||||
|
@ -23,13 +23,6 @@ class ImGroup extends Model
|
||||
*/
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* 课程编号
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $course_id;
|
||||
|
||||
/**
|
||||
* 群主编号
|
||||
*
|
||||
@ -37,6 +30,13 @@ class ImGroup extends Model
|
||||
*/
|
||||
public $owner_id;
|
||||
|
||||
/**
|
||||
* 课程编号
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $course_id;
|
||||
|
||||
/**
|
||||
* 群组类型
|
||||
*
|
||||
|
@ -10,8 +10,8 @@ class Nav extends Model
|
||||
/**
|
||||
* 位置类型
|
||||
*/
|
||||
const POSITION_TOP = 'top';
|
||||
const POSITION_BOTTOM = 'bottom';
|
||||
const POS_TOP = 'top';
|
||||
const POS_BOTTOM = 'bottom';
|
||||
|
||||
/**
|
||||
* 打开方式
|
||||
@ -33,20 +33,6 @@ class Nav extends Model
|
||||
*/
|
||||
public $parent_id;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $name;
|
||||
|
||||
/**
|
||||
* 优先级
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $priority;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
*
|
||||
@ -54,6 +40,13 @@ class Nav extends Model
|
||||
*/
|
||||
public $level;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $name;
|
||||
|
||||
/**
|
||||
* 路径
|
||||
*
|
||||
@ -69,18 +62,25 @@ class Nav extends Model
|
||||
public $position;
|
||||
|
||||
/**
|
||||
* 链接
|
||||
* 打开方式
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $target;
|
||||
|
||||
/**
|
||||
* 链接地址
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $url;
|
||||
|
||||
/**
|
||||
* 打开方式
|
||||
* 优先级
|
||||
*
|
||||
* @var string
|
||||
* @var int
|
||||
*/
|
||||
public $target;
|
||||
public $priority;
|
||||
|
||||
/**
|
||||
* 发布标识
|
||||
@ -148,11 +148,11 @@ class Nav extends Model
|
||||
$this->update_time = time();
|
||||
}
|
||||
|
||||
public static function positionTypes()
|
||||
public static function posTypes()
|
||||
{
|
||||
return [
|
||||
self::POSITION_TOP => '顶部',
|
||||
self::POSITION_BOTTOM => '底部',
|
||||
self::POS_TOP => '顶部',
|
||||
self::POS_BOTTOM => '底部',
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -53,20 +53,6 @@ class Order extends Model
|
||||
*/
|
||||
public $amount;
|
||||
|
||||
/**
|
||||
* 状态类型
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $status;
|
||||
|
||||
/**
|
||||
* 删除标识
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $deleted;
|
||||
|
||||
/**
|
||||
* 用户编号
|
||||
*
|
||||
@ -109,6 +95,20 @@ class Order extends Model
|
||||
*/
|
||||
public $client_ip;
|
||||
|
||||
/**
|
||||
* 状态类型
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $status;
|
||||
|
||||
/**
|
||||
* 删除标识
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $deleted;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*
|
||||
|
@ -70,7 +70,7 @@ class Danmu extends Validator
|
||||
|
||||
public function checkPosition($pos)
|
||||
{
|
||||
$list = DanmuModel::positionTypes();
|
||||
$list = DanmuModel::posTypes();
|
||||
|
||||
if (!isset($list[$pos])) {
|
||||
throw new BadRequestException('danmu.invalid_position');
|
||||
|
@ -93,7 +93,7 @@ class Nav extends Validator
|
||||
|
||||
public function checkPosition($position)
|
||||
{
|
||||
$list = NavModel::positionTypes();
|
||||
$list = NavModel::posTypes();
|
||||
|
||||
if (!isset($list[$position])) {
|
||||
throw new BadRequestException('nav.invalid_position');
|
||||
|
4154
db/migrations/20200827063842_init_table.php
Normal file
4154
db/migrations/20200827063842_init_table.php
Normal file
File diff suppressed because it is too large
Load Diff
533
db/migrations/20200827112717_insert_setting_data.php
Normal file
533
db/migrations/20200827112717_insert_setting_data.php
Normal file
@ -0,0 +1,533 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class InsertSettingData extends AbstractMigration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
$rows = array(
|
||||
0 =>
|
||||
array(
|
||||
'section' => 'captcha',
|
||||
'item_key' => 'app_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
1 =>
|
||||
array(
|
||||
'section' => 'captcha',
|
||||
'item_key' => 'secret_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
2 =>
|
||||
array(
|
||||
'section' => 'captcha',
|
||||
'item_key' => 'enabled',
|
||||
'item_value' => '0',
|
||||
),
|
||||
3 =>
|
||||
array(
|
||||
'section' => 'im.cs',
|
||||
'item_key' => 'user1_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
4 =>
|
||||
array(
|
||||
'section' => 'im.cs',
|
||||
'item_key' => 'enabled',
|
||||
'item_value' => '0',
|
||||
),
|
||||
5 =>
|
||||
array(
|
||||
'section' => 'im.cs',
|
||||
'item_key' => 'user3_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
6 =>
|
||||
array(
|
||||
'section' => 'im.cs',
|
||||
'item_key' => 'user2_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
7 =>
|
||||
array(
|
||||
'section' => 'im.main',
|
||||
'item_key' => 'msg_max_length',
|
||||
'item_value' => '1000',
|
||||
),
|
||||
8 =>
|
||||
array(
|
||||
'section' => 'im.main',
|
||||
'item_key' => 'title',
|
||||
'item_value' => '菜鸟驿站',
|
||||
),
|
||||
9 =>
|
||||
array(
|
||||
'section' => 'im.main',
|
||||
'item_key' => 'upload_img_enabled',
|
||||
'item_value' => '0',
|
||||
),
|
||||
10 =>
|
||||
array(
|
||||
'section' => 'im.main',
|
||||
'item_key' => 'upload_file_enabled',
|
||||
'item_value' => '0',
|
||||
),
|
||||
11 =>
|
||||
array(
|
||||
'section' => 'im.main',
|
||||
'item_key' => 'tool_audio_enabled',
|
||||
'item_value' => '0',
|
||||
),
|
||||
12 =>
|
||||
array(
|
||||
'section' => 'im.main',
|
||||
'item_key' => 'tool_video_enabled',
|
||||
'item_value' => '0',
|
||||
),
|
||||
13 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'push_domain',
|
||||
'item_value' => 'push.abc.com',
|
||||
),
|
||||
14 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'pull_trans_template',
|
||||
'item_value' => '{"fd":{"id":"fd","bit_rate":"500","summary":"流畅","height":"540"},"sd":{"id":"sd","bit_rate":"1000","summary":"标清","height":"720"},"hd":{"id":"hd","bit_rate":"2000","summary":"高清","height":"1080"}}',
|
||||
),
|
||||
15 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'pull_trans_enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
16 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'pull_auth_enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
17 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'push_auth_enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
18 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'pull_protocol',
|
||||
'item_value' => 'http',
|
||||
),
|
||||
19 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'push_auth_delta',
|
||||
'item_value' => '18000',
|
||||
),
|
||||
20 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'pull_auth_delta',
|
||||
'item_value' => '18000',
|
||||
),
|
||||
21 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'pull_auth_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
22 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'pull_domain',
|
||||
'item_value' => 'play.abc.com',
|
||||
),
|
||||
23 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'push_template',
|
||||
'item_value' => '',
|
||||
),
|
||||
24 =>
|
||||
array(
|
||||
'section' => 'live',
|
||||
'item_key' => 'push_auth_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
25 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_host',
|
||||
'item_value' => 'smtp.163.com',
|
||||
),
|
||||
26 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_port',
|
||||
'item_value' => '465',
|
||||
),
|
||||
27 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_encryption',
|
||||
'item_value' => 'ssl',
|
||||
),
|
||||
28 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_username',
|
||||
'item_value' => 'abc@163.com',
|
||||
),
|
||||
29 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_password',
|
||||
'item_value' => '888888',
|
||||
),
|
||||
30 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_from_email',
|
||||
'item_value' => 'abc@163.com',
|
||||
),
|
||||
31 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_from_name',
|
||||
'item_value' => 'ABC有限公司',
|
||||
),
|
||||
32 =>
|
||||
array(
|
||||
'section' => 'mailer',
|
||||
'item_key' => 'smtp_authentication',
|
||||
'item_value' => '1',
|
||||
),
|
||||
33 =>
|
||||
array(
|
||||
'section' => 'pay.alipay',
|
||||
'item_key' => 'public_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
34 =>
|
||||
array(
|
||||
'section' => 'pay.alipay',
|
||||
'item_key' => 'private_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
35 =>
|
||||
array(
|
||||
'section' => 'pay.alipay',
|
||||
'item_key' => 'enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
36 =>
|
||||
array(
|
||||
'section' => 'pay.alipay',
|
||||
'item_key' => 'return_url',
|
||||
'item_value' => '',
|
||||
),
|
||||
37 =>
|
||||
array(
|
||||
'section' => 'pay.alipay',
|
||||
'item_key' => 'notify_url',
|
||||
'item_value' => '',
|
||||
),
|
||||
38 =>
|
||||
array(
|
||||
'section' => 'pay.alipay',
|
||||
'item_key' => 'app_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
39 =>
|
||||
array(
|
||||
'section' => 'pay.wxpay',
|
||||
'item_key' => 'notify_url',
|
||||
'item_value' => '',
|
||||
),
|
||||
40 =>
|
||||
array(
|
||||
'section' => 'pay.wxpay',
|
||||
'item_key' => 'return_url',
|
||||
'item_value' => '',
|
||||
),
|
||||
41 =>
|
||||
array(
|
||||
'section' => 'pay.wxpay',
|
||||
'item_key' => 'app_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
42 =>
|
||||
array(
|
||||
'section' => 'pay.wxpay',
|
||||
'item_key' => 'mch_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
43 =>
|
||||
array(
|
||||
'section' => 'pay.wxpay',
|
||||
'item_key' => 'key',
|
||||
'item_value' => '',
|
||||
),
|
||||
44 =>
|
||||
array(
|
||||
'section' => 'pay.wxpay',
|
||||
'item_key' => 'enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
45 =>
|
||||
array(
|
||||
'section' => 'secret',
|
||||
'item_key' => 'secret_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
46 =>
|
||||
array(
|
||||
'section' => 'secret',
|
||||
'item_key' => 'secret_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
47 =>
|
||||
array(
|
||||
'section' => 'secret',
|
||||
'item_key' => 'app_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
48 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'keywords',
|
||||
'item_value' => '开源网课系统,开源网校系统,开源网络教育平台,开源在线教育平台',
|
||||
),
|
||||
49 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'analytics',
|
||||
'item_value' => '',
|
||||
),
|
||||
50 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'icp_sn',
|
||||
'item_value' => '',
|
||||
),
|
||||
51 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'icp_link',
|
||||
'item_value' => 'http://www.miitbeian.gov.cn',
|
||||
),
|
||||
52 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'police_sn',
|
||||
'item_value' => '',
|
||||
),
|
||||
53 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'police_link',
|
||||
'item_value' => 'http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=abc',
|
||||
),
|
||||
54 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'copyright',
|
||||
'item_value' => '2016-2020 深圳市酷瓜软件有限公司',
|
||||
),
|
||||
55 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'base_url',
|
||||
'item_value' => '',
|
||||
),
|
||||
56 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
57 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'closed_tips',
|
||||
'item_value' => '站点维护中,请稍后再访问。',
|
||||
),
|
||||
58 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'description',
|
||||
'item_value' => '酷瓜云课堂,依托腾讯云基础服务,使用C扩展框架PHALCON开发',
|
||||
),
|
||||
59 =>
|
||||
array(
|
||||
'section' => 'site',
|
||||
'item_key' => 'title',
|
||||
'item_value' => '酷瓜云课堂',
|
||||
),
|
||||
60 =>
|
||||
array(
|
||||
'section' => 'smser',
|
||||
'item_key' => 'app_id',
|
||||
'item_value' => '',
|
||||
),
|
||||
61 =>
|
||||
array(
|
||||
'section' => 'smser',
|
||||
'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}"}}',
|
||||
),
|
||||
62 =>
|
||||
array(
|
||||
'section' => 'smser',
|
||||
'item_key' => 'signature',
|
||||
'item_value' => 'abc',
|
||||
),
|
||||
63 =>
|
||||
array(
|
||||
'section' => 'smser',
|
||||
'item_key' => 'app_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
64 =>
|
||||
array(
|
||||
'section' => 'storage',
|
||||
'item_key' => 'ci_protocol',
|
||||
'item_value' => 'https',
|
||||
),
|
||||
65 =>
|
||||
array(
|
||||
'section' => 'storage',
|
||||
'item_key' => 'bucket_name',
|
||||
'item_value' => '',
|
||||
),
|
||||
66 =>
|
||||
array(
|
||||
'section' => 'storage',
|
||||
'item_key' => 'ci_domain',
|
||||
'item_value' => '',
|
||||
),
|
||||
67 =>
|
||||
array(
|
||||
'section' => 'storage',
|
||||
'item_key' => 'bucket_region',
|
||||
'item_value' => '',
|
||||
),
|
||||
68 =>
|
||||
array(
|
||||
'section' => 'storage',
|
||||
'item_key' => 'bucket_protocol',
|
||||
'item_value' => 'https',
|
||||
),
|
||||
69 =>
|
||||
array(
|
||||
'section' => 'storage',
|
||||
'item_key' => 'bucket_domain',
|
||||
'item_value' => '',
|
||||
),
|
||||
70 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'dist_protocol',
|
||||
'item_value' => 'https',
|
||||
),
|
||||
71 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'watermark_enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
72 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'watermark_template',
|
||||
'item_value' => '462027',
|
||||
),
|
||||
73 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'video_template',
|
||||
'item_value' => '100210,100220,100230',
|
||||
),
|
||||
74 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'audio_format',
|
||||
'item_value' => 'mp3',
|
||||
),
|
||||
75 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'video_format',
|
||||
'item_value' => 'hls',
|
||||
),
|
||||
76 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'storage_type',
|
||||
'item_value' => 'nearby',
|
||||
),
|
||||
77 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'storage_region',
|
||||
'item_value' => '',
|
||||
),
|
||||
78 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'template',
|
||||
'item_value' => '',
|
||||
),
|
||||
79 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'key_anti_ip_limit',
|
||||
'item_value' => '',
|
||||
),
|
||||
80 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'dist_domain',
|
||||
'item_value' => '',
|
||||
),
|
||||
81 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'audio_template',
|
||||
'item_value' => '1110',
|
||||
),
|
||||
82 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'key_anti_key',
|
||||
'item_value' => '',
|
||||
),
|
||||
83 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'key_anti_expiry',
|
||||
'item_value' => '10800',
|
||||
),
|
||||
84 =>
|
||||
array(
|
||||
'section' => 'vod',
|
||||
'item_key' => 'key_anti_enabled',
|
||||
'item_value' => '1',
|
||||
),
|
||||
);
|
||||
|
||||
$this->table('kg_setting')->insert($rows)->save();
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->execute('DELETE FROM kg_setting');
|
||||
}
|
||||
|
||||
}
|
59
db/migrations/20200827113559_insert_user_data.php
Normal file
59
db/migrations/20200827113559_insert_user_data.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class InsertUserData extends AbstractMigration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
$account = [
|
||||
'id' => 10000,
|
||||
'email' => '10000@163.com',
|
||||
'password' => '772b6a120699280eb2cce32ec706656a',
|
||||
'salt' => 'MbZWxN3L',
|
||||
];
|
||||
|
||||
$this->table('kg_account')->insert($account)->save();
|
||||
|
||||
$user = [
|
||||
'id' => $account['id'],
|
||||
'name' => '酷瓜云网课',
|
||||
'avatar' => '/img/avatar/default.png',
|
||||
'title' => '官方人员',
|
||||
'about' => '酷瓜云课堂,依托腾讯云基础服务,使用C扩展框架PHALCON开发',
|
||||
'admin_role' => 1,
|
||||
'edu_role' => 2,
|
||||
];
|
||||
|
||||
$this->table('kg_user')->insert($user)->save();
|
||||
|
||||
$imUser = [
|
||||
'id' => $user['id'],
|
||||
'name' => $user['name'],
|
||||
'avatar' => $user['avatar'],
|
||||
];
|
||||
|
||||
$this->table('kg_im_user')->insert($imUser)->save();
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$id = 10000;
|
||||
|
||||
$sql = sprintf('DELETE FROM kg_account WHERE id = %d', $id);
|
||||
|
||||
$this->execute($sql);
|
||||
|
||||
$sql = sprintf('DELETE FROM kg_user WHERE id = %d', $id);
|
||||
|
||||
$this->execute($sql);
|
||||
|
||||
$sql = sprintf('DELETE FROM kg_im_user WHERE id = %d', $id);
|
||||
|
||||
$this->execute($sql);
|
||||
}
|
||||
|
||||
}
|
23
db/migrations/20200827120717_insert_nav_data.php
Normal file
23
db/migrations/20200827120717_insert_nav_data.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class InsertNavData extends AbstractMigration
|
||||
{
|
||||
/**
|
||||
* Change Method.
|
||||
*
|
||||
* Write your reversible migrations using this method.
|
||||
*
|
||||
* More information on writing migrations is available here:
|
||||
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
|
||||
*
|
||||
* Remember to call "create()" or "update()" and NOT "save()" when working
|
||||
* with the Table class.
|
||||
*/
|
||||
public function change(): void
|
||||
{
|
||||
|
||||
}
|
||||
}
|
14594
db/migrations/schema.php
Normal file
14594
db/migrations/schema.php
Normal file
File diff suppressed because it is too large
Load Diff
@ -42,18 +42,34 @@ layui.use(['jquery', 'layim'], function () {
|
||||
}
|
||||
};
|
||||
|
||||
layim.config({
|
||||
title: window.im.title,
|
||||
init: {
|
||||
url: '/im/init'
|
||||
},
|
||||
members: {
|
||||
url: '/im/group/users'
|
||||
},
|
||||
var options = {
|
||||
init: {url: '/im/init'},
|
||||
members: {url: '/im/group/users'},
|
||||
msgbox: '/im/msgbox',
|
||||
chatLog: '/im/chatlog',
|
||||
maxLength: 1000
|
||||
});
|
||||
title: window.im.main.title,
|
||||
maxLength: window.im.main.msg_max_length,
|
||||
isAudio: false,
|
||||
isVideo: false
|
||||
};
|
||||
|
||||
if (window.im.main.upload_img_enabled === '1') {
|
||||
options.uploadImage = {url: '/upload/im/img'};
|
||||
}
|
||||
|
||||
if (window.im.main.upload_file_enabled === '1') {
|
||||
options.uploadFile = {url: '/upload/im/file'};
|
||||
}
|
||||
|
||||
if (window.im.main.tool_audio_enabled === '1') {
|
||||
options.isAudio = true;
|
||||
}
|
||||
|
||||
if (window.im.main.tool_video_enabled === '1') {
|
||||
options.isVideo = true;
|
||||
}
|
||||
|
||||
layim.config(options);
|
||||
|
||||
layim.on('ready', function (options) {
|
||||
if (options.friend.length > 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user