1
0
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:
xiaochong0302 2020-08-27 20:11:28 +08:00
parent aa66660e47
commit 1faf364d54
29 changed files with 19568 additions and 151 deletions

View File

@ -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),
];
}

View File

@ -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();

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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') }}

View File

@ -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>

View File

@ -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>

View 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>

View File

@ -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>

View File

@ -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">

View File

@ -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,
];
}

View File

@ -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>

View 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>

View File

@ -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') }}

View File

@ -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') }}

View File

@ -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;
/**
* 发布标识
*

View File

@ -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);

View File

@ -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;
/**
* 群组类型
*

View File

@ -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 => '底部',
];
}

View File

@ -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;
/**
* 创建时间
*

View File

@ -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');

View File

@ -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');

File diff suppressed because it is too large Load Diff

View 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');
}
}

View 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);
}
}

View 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

File diff suppressed because it is too large Load Diff

View File

@ -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) {