1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-30 03:40:39 +08:00

Compare commits

...

814 Commits

Author SHA1 Message Date
xiaochong0302
2c9f3b7577 补充course_user中教师来源类型 2025-06-19 10:02:10 +08:00
xiaochong0302
13b3327b2f 教师可访问其教授课程 2025-06-18 15:45:44 +08:00
xiaochong0302
247050f4ef Merge branch 'koogua/v1.7.8'
# Conflicts:
#	public/static/admin/js/avatar.upload.js
2025-06-15 16:51:20 +08:00
xiaochong0302
57409cb630 v1.7.8 2025-06-15 15:08:42 +08:00
xiaochong0302
4e1e8340b9 1.添加closeLiveTask
2.优化kg-back返回
3.优化统计分析代码位置
2025-06-11 15:01:23 +08:00
xiaochong0302
2ab6ae71cd 1.优化直播状态显示
2.优化关闭注册提示
2025-06-09 22:46:28 +08:00
xiaochong0302
303442f446 搜索结果中图片alt属性增加striptags过滤 2025-06-09 19:08:33 +08:00
xiaochong0302
7281029dd0 sitemap.xml直接写入public目录 2025-06-05 17:53:06 +08:00
xiaochong0302
f5ed2ce239 优化fixbar电话图标 2025-05-26 19:19:12 +08:00
xiaochong0302
2a1b4b69fd fixbar增加电话图标 2025-05-26 10:41:17 +08:00
xiaochong0302
123e1ec97f 后台重置头像->上传头像 2025-05-23 17:03:58 +08:00
xiaochong0302
b2f795eb3b 还原几个不能为空的腾讯云配置 2025-05-22 23:31:26 +08:00
xiaochong0302
12db90d9c1 还原几个不能为空的腾讯云配置 2025-05-22 23:31:12 +08:00
xiaochong0302
59bfe4a765 gitee webhook测试 2025-05-21 11:05:18 +08:00
xiaochong0302
fb0b760e2e 1.优化后台配置默认值
2.后台增加返回顶部功能
3.精简优化逻辑
2025-05-20 18:09:19 +08:00
xiaochong0302
e31b86580d 优化课时列表直播提示 2025-05-20 18:09:15 +08:00
xiaochong0302
f2a446a876 移除Throttle 2025-05-20 18:09:12 +08:00
xiaochong0302
27440fe679 1.优化后台配置默认值
2.后台增加返回顶部功能
3.精简优化逻辑
2025-05-20 18:06:11 +08:00
xiaochong0302
7a9fee5545 优化课时列表直播提示 2025-05-08 17:18:20 +08:00
xiaochong0302
d927e619e8 移除Throttle 2025-05-02 07:55:38 +08:00
xiaochong0302
77cdc594ff 优化layer窗口中表单的跳转 2025-04-20 17:05:30 +08:00
xiaochong0302
0d8b07033a 优化layer窗口中表单的跳转 2025-04-20 17:03:36 +08:00
xiaochong0302
9ad15b72cf 优化倒计时 2025-04-20 17:03:32 +08:00
xiaochong0302
12f0f6dc87 重命令若干路由 2025-04-20 17:03:28 +08:00
xiaochong0302
3efa081e81 LiveChapter -> LiveChat 2025-04-20 17:03:24 +08:00
xiaochong0302
47a6c5cce1 修正workerman中onMessage无法调用问题 2025-04-20 17:03:20 +08:00
xiaochong0302
328aea1e2d 1.优化章节列表UI
2.优化评价UI
2025-04-20 17:03:17 +08:00
xiaochong0302
e5869e1e8f 1.优化课程目录UI
2.优化收藏UI
3.修正收费课程试听问题
2025-04-20 17:03:14 +08:00
xiaochong0302
9fcea65989 1.优化vip页面
2.优化索引管理工具
2025-04-20 17:03:11 +08:00
xiaochong0302
08d3859e38 1.抽离refund.info.js
2.优化获取临时令牌日志
2025-04-03 19:02:48 +08:00
xiaochong0302
02983a27c9 优化微信公众号相关 2025-04-03 19:02:45 +08:00
xiaochong0302
72deb17daa 增强注册验证 2025-04-03 19:02:42 +08:00
xiaochong0302
76edeef591 v1.7.6 2025-03-19 22:09:45 +08:00
xiaochong0302
9c737c7241 更新layui-v2.9.25 2025-03-19 22:09:41 +08:00
xiaochong0302
21f9bdd4b1 去除不必要的deliver阻断 2025-03-19 22:09:36 +08:00
xiaochong0302
9b0700e5c1 统一支付和登录二维码样式 2025-03-19 22:09:23 +08:00
xiaochong0302
054ab77f08 去除多余的引入 2025-03-11 18:51:50 +08:00
xiaochong0302
90ab9bc018 修正文章和问题缓存 2025-03-11 18:48:58 +08:00
xiaochong0302
77b7224901 限制全文搜索长度为50 2025-03-11 18:48:55 +08:00
xiaochong0302
f5665bc94a 修正SiteVisit积分问题 2025-02-25 16:41:48 +08:00
xiaochong0302
2b08bf737d v1.7.5 2025-02-22 16:03:56 +08:00
xiaochong0302
fce99c2472 优化编辑器页 2025-02-20 20:10:24 +08:00
xiaochong0302
5854d86875 整理categoryId相关 2025-02-20 20:10:21 +08:00
xiaochong0302
e22f3b4bdc 精简优化错误处理机制 2025-02-17 20:16:15 +08:00
xiaochong0302
3070231ca8 优化错误处理机制 2025-02-17 12:42:11 +08:00
xiaochong0302
38f8e27c9c 修正用户注册时502 bad gateway 2025-02-16 13:14:34 +08:00
xiaochong0302
fb7301de4c 1.优化Nav导航
2.优化logo样式
2025-02-16 13:14:31 +08:00
xiaochong0302
9206166910 1.优化后台数据统计日期问题
2.优化内容图片放大查看
2025-02-16 13:14:17 +08:00
xiaochong0302
97af1081d3 修正root账号初始数据 2025-01-10 21:14:37 +08:00
xiaochong0302
2d26c2659b 统一规范$this->response->redirect 2025-01-08 17:42:39 +08:00
xiaochong0302
f273e874e7 Merge branch 'koogua/v1.7.5' 2025-01-05 21:34:33 +08:00
xiaochong0302
b919239308 v1.7.5 release 2025-01-05 21:33:29 +08:00
xiaochong0302
9d210deedf 去除过度设计的缓存 2025-01-05 20:51:54 +08:00
xiaochong0302
09723a9d34 优化积分兑换页 2025-01-05 09:21:45 +08:00
xiaochong0302
9d8ed0f863 还原分页中kg_array_object 2025-01-04 17:21:29 +08:00
xiaochong0302
e27a203ac8 精简整理代码 2025-01-02 11:29:06 +08:00
xiaochong0302
c3887845a9 更新QQ支持群 2024-12-28 14:40:18 +08:00
xiaochong0302
4d810eae98 更新QQ支持群 2024-12-28 14:39:29 +08:00
xiaochong0302
601c71b8a4 精简代码 2024-12-27 21:21:29 +08:00
xiaochong0302
3a6d295aa1 精简判断 2024-12-24 10:56:02 +08:00
xiaochong0302
6614cdc8d2 1.优化boostrap
2.优化logger
3.优化contact
2024-12-16 20:27:40 +08:00
xiaochong0302
0f38ce7d62 1.优化搜索索引
2.优化服务状态监控
3.优化ChapterUserTrait
2024-12-13 08:37:31 +08:00
xiaochong0302
6f005f741c Merge remote-tracking branch 'origin/master' 2024-12-08 16:00:41 +08:00
xiaochong0302
9a51f95d26 v1.7.4 release 2024-12-07 18:23:43 +08:00
xiaochong0302
41cb93d6d5 升级layui-v2.9.20 2024-12-07 11:35:57 +08:00
xiaochong0302
978b77a184 优化CourseUserTrait等 2024-12-06 21:56:49 +08:00
xiaochong0302
98cc8da285 1.精简AccountSearchTrait
2.优化CsrfToken
3.优化kg_setting
4.修正CommentInfo
2024-12-02 17:14:31 +08:00
xiaochong0302
a0e7bce18b 优化kg_h5_index_url() 2024-11-14 17:26:35 +08:00
xiaochong0302
9811186434 修正chapter详情页目录中当前课时高亮问题 2024-11-13 21:59:10 +08:00
xiaochong0302
cdc8074f88 联系方式增加抖音二维码 2024-11-10 22:26:37 +08:00
xiaochong0302
0f446fef10 优化课程期限 2024-11-09 20:38:29 +08:00
xiaochong0302
7ff6f470aa 优化定时自动提交 2024-11-09 20:38:15 +08:00
xiaochong0302
5b30d5d880 优化定时自动提交 2024-11-09 20:37:43 +08:00
xiaochong0302
f482a8ec9e 优化课程期限 2024-10-20 19:32:33 +08:00
xiaochong0302
2302f44c03 Merge branch 'koogua/v1.7.3' 2024-10-10 21:01:29 +08:00
xiaochong0302
4ec6f60b06 v1.7.3 release 2024-10-10 21:00:33 +08:00
xiaochong0302
fa8d27d668 v1.7.3 release 2024-10-10 20:59:23 +08:00
xiaochong0302
a24ea6149e 更新layui-v2.9.16 2024-09-21 11:09:49 +08:00
xiaochong0302
978f064e2b 增加编辑器内容自动提交 2024-09-18 10:23:02 +08:00
xiaochong0302
a360ce0f83 1.优化findUserActiveSessions
2.优化findUserActiveTokens
3.修改文章和提问可用tag数量
4.优化用户锁定相关
2024-09-14 08:32:33 +08:00
xiaochong0302
9b37570a78 1.优化默认文件上传
2.上传文件失败抛出异常
2024-08-13 19:47:38 +08:00
xiaochong0302
86efc64651 Merge branch 'koogua/v1.7.2' 2024-08-13 09:29:06 +08:00
xiaochong0302
d5353ff5d2 1.增加log.trace日志配置
2.migration抽象增加saveSetting方法
2024-08-13 09:27:26 +08:00
xiaochong0302
3a703dd0e1 1.redis增加expire()方法
2.精简代码
2024-07-30 20:06:17 +08:00
xiaochong0302
7c5ea7fe34 后台增加客户服务入口 2024-07-27 08:30:03 +08:00
xiaochong0302
17691a6a1b 修正课程列表分类筛选条件 2024-07-25 11:51:28 +08:00
xiaochong0302
759253cfc5 修正TeacherLiveNotice 2024-07-24 14:21:53 +08:00
xiaochong0302
0f5ed61158 更新layui-v2.9.14 2024-07-12 17:46:01 +08:00
xiaochong0302
e39c140d35 整理doc参数 2024-07-05 20:30:56 +08:00
xiaochong0302
91a878ba98 整理doc参数 2024-07-05 20:30:32 +08:00
xiaochong0302
56f94d3ea8 修正邮件内容格式化 2024-07-04 15:31:24 +08:00
xiaochong0302
36ee91c1cf 修正邮件内容格式化 2024-07-04 15:31:00 +08:00
xiaochong0302
8aaed108b9 Merge branch 'koogua/v1.7.1' 2024-07-01 10:03:35 +08:00
xiaochong0302
4a5cc68915 优化公众号关注订阅 2024-07-01 09:24:29 +08:00
xiaochong0302
f0470c027d 优化邮件发送格式化 2024-06-29 21:26:53 +08:00
xiaochong0302
703d5cbc3d 短信发送处理中增加描述对照 2024-06-28 20:41:45 +08:00
xiaochong0302
f04c23e90f 1.添加课程和章节事件监听
2.优化SEO类
2024-06-28 08:26:28 +08:00
xiaochong0302
b55350a9a4 整理文件,去除无用代码 2024-06-23 08:16:59 +08:00
xiaochong0302
0aa07da41b 整理文件,去除无用代码 2024-06-23 08:16:20 +08:00
xiaochong0302
f66dab48ec Merge branch 'koogua/v1.7.1' 2024-06-21 10:06:14 +08:00
xiaochong0302
2014d99c7e 更新layui-v2.9.10 2024-06-21 09:59:13 +08:00
xiaochong0302
3efdc0698e 课程增加是否能够发布检查 2024-06-12 15:52:24 +08:00
xiaochong0302
675ee63674 清理创建kindeditor默认语言文件 2024-06-12 12:37:59 +08:00
xiaochong0302
14534b8461 去除课程打赏 2024-06-08 15:40:09 +08:00
xiaochong0302
30d9b80ca8 更新文件mimeType 2024-06-02 16:50:35 +08:00
xiaochong0302
17b7f64de7 1.优化富文本内容显示样式
2.简化内容图片放大监听
2024-06-01 16:27:15 +08:00
xiaochong0302
8e618b5bc7 更新mimeTypes 2024-05-29 20:49:23 +08:00
xiaochong0302
4467f8748f 优化FileInfo中MimeType检查 2024-05-28 17:31:39 +08:00
xiaochong0302
45125453e0 iconfont资源本地化 2024-05-28 17:19:52 +08:00
xiaochong0302
200a0b0d16 1.优化storage上传mimeType检查
2.增加打开/关闭左侧菜单提示
2024-05-26 11:49:02 +08:00
xiaochong0302
272a3255d2 优化UploadController 2024-05-26 11:48:18 +08:00
xiaochong0302
dfb88ee09e 1.优化storage上传mimeType检查
2.增加打开/关闭左侧菜单提示
2024-05-25 21:55:04 +08:00
xiaochong0302
0c962920de connect_list增加过滤条件 2024-05-18 09:28:39 +08:00
xiaochong0302
b0b28117f5 connect_list增加过滤条件 2024-05-18 09:28:01 +08:00
xiaochong0302
e22a716aa5 1.调整微信公众号模板消息 2024-05-17 15:46:18 +08:00
xiaochong0302
dd469752e1 1.调整微信公众号模板消息 2024-05-17 15:45:58 +08:00
xiaochong0302
f5ba565f99 修正课程列表顶部过滤条件部分无法收缩问题 2024-05-16 21:29:26 +08:00
xiaochong0302
d0921a8afd 修正课程列表顶部过滤条件部分无法收缩问题 2024-05-16 21:29:02 +08:00
xiaochong0302
fba681a4b5 移除consult中多余的chapter_id属性 2024-05-16 16:46:33 +08:00
xiaochong0302
56f66c01bd 调整微信公众号模板消息 2024-05-16 11:29:19 +08:00
xiaochong0302
8a5aa01d1c 支付限额1w->10w 2024-05-13 18:52:57 +08:00
xiaochong0302
a31c991b1c 1.优化ShareUrl
2.第三方登录增加账号可用性判断
3.优化公众号关注相关
2024-05-12 19:17:57 +08:00
xiaochong0302
b2eb5d56d3 Merge branch 'koogua/v1.6.9' 2024-05-10 09:41:19 +08:00
xiaochong0302
0c30cda0c3 v1.7.0 2024-05-09 21:40:40 +08:00
xiaochong0302
a0e8e932e1 v1.7.0 2024-05-09 21:37:23 +08:00
xiaochong0302
bd14979e9b 调整编辑器htmlTags属性 2024-05-05 21:52:13 +08:00
xiaochong0302
4e80f3938a 登录后台同时登录前台 2024-05-02 11:04:21 +08:00
xiaochong0302
9addc3debe 调整编辑器条目 2024-04-29 16:26:59 +08:00
xiaochong0302
e24cf1bd1c 1.调整编辑器条目
2.增加代码块复制
2024-04-28 21:17:36 +08:00
xiaochong0302
c355709d03 Merge branch 'koogua/v1.6.9' 2024-04-24 15:42:19 +08:00
xiaochong0302
2b3372c8e8 更新layui-v2.9.8 2024-04-24 15:20:16 +08:00
xiaochong0302
a790cf878b 清理无用的Captcha配置 2024-04-23 22:52:35 +08:00
xiaochong0302
4171039f16 contact改QQ上传二维码图片 2024-04-23 22:12:34 +08:00
xiaochong0302
9a29e21441 contact改QQ上传二维码图片 2024-04-23 22:12:23 +08:00
xiaochong0302
502bd8588d 修正contact二维码图片上传上传 2024-04-23 20:59:15 +08:00
xiaochong0302
621123ee3d 修正contact二维码图片上传上传 2024-04-23 20:58:44 +08:00
xiaochong0302
0d6420ef16 修正logo,favicon上传 2024-04-20 10:50:02 +08:00
xiaochong0302
547bb72910 修正logo,favicon上传 2024-04-20 10:49:37 +08:00
xiaochong0302
046db8877c Merge branch 'koogua/v1.6.9'
# Conflicts:
#	app/Validators/Security.php
2024-04-13 08:05:15 +08:00
xiaochong0302
c968a3a69f v1.6.9 2024-04-10 19:42:48 +08:00
xiaochong0302
d31ae5b7be 1.修正chapter_user中duration重复计数的问题 2024-04-10 18:58:55 +08:00
xiaochong0302
65b0bf1678 补充缺失的CourseUserTrait 2024-04-10 17:10:18 +08:00
xiaochong0302
af4b570681 增加删除和还原用户功能 2024-04-08 10:59:19 +08:00
xiaochong0302
d95b218812 优化CourseUserTrait 2024-04-06 22:27:43 +08:00
xiaochong0302
d3623b2654 优化CategoryTreeList 2024-04-02 10:48:33 +08:00
xiaochong0302
b96c711a6f 更新layui-v2.9.7 2024-03-24 21:00:17 +08:00
xiaochong0302
89145284aa 1.Response增加unauthorized响应
2.open_avatar字段增加长度为255
3.清理无用的代码
2024-03-13 08:57:55 +08:00
xiaochong0302
00cb8bf963 1.拆解migration创建表脚本
2.增加post方式传递csrf_token
3.优化storage上传
2024-02-26 09:56:51 +08:00
xiaochong0302
c304fbd423 1.修正home模块编辑器图片上传
2.精简CsrfToken白名单
2024-02-04 16:59:08 +08:00
xiaochong0302
2506ea4078 1.优化文章和提问搜索条件
2.优化课程详情页排版
2024-02-04 16:57:13 +08:00
xiaochong0302
542e96846f 1.修正home模块编辑器图片上传
2.精简CsrfToken白名单
2024-02-02 20:58:22 +08:00
xiaochong0302
3b18267c6f 1.删除chapter中resource_count,consult_count属性
2.重新统计course中resource_count
2024-01-31 18:06:01 +08:00
xiaochong0302
c4259d78f3 1.删除chapter中resource_count,consult_count属性
2.重新统计course中resource_count
2024-01-31 18:01:25 +08:00
xiaochong0302
6a5c4845dc 修正首页缓存刷新问题 2024-01-30 17:54:32 +08:00
xiaochong0302
9b7a244fa3 修正首页缓存刷新问题 2024-01-30 17:54:09 +08:00
xiaochong0302
d0091f4695 Merge branch 'koogua/v1.6.8'
# Conflicts:
#	app/Http/Admin/Views/chapter/lessons.volt
#	app/Http/Admin/Views/chapter/lessons_live.volt
#	app/Http/Admin/Views/chapter/lessons_offline.volt
#	app/Http/Admin/Views/chapter/lessons_read.volt
#	app/Http/Admin/Views/chapter/lessons_vod.volt
2024-01-30 12:02:00 +08:00
xiaochong0302
01587189cb v1.6.8发布 2024-01-30 11:47:15 +08:00
xiaochong0302
45dfa0d269 去除league/commonmark包 2024-01-25 21:45:01 +08:00
xiaochong0302
56e04fc3a3 优化分类等必选判断 2024-01-22 12:37:58 +08:00
xiaochong0302
3079a9855a 修正course_user中active_time未更新问题 2024-01-11 20:42:54 +08:00
xiaochong0302
ebc609ac19 修正chapter_user表中plan_id=0问题 2024-01-11 20:31:09 +08:00
xiaochong0302
486ac7bd69 修正chapter_user表中plan_id=0问题 2024-01-11 20:30:28 +08:00
xiaochong0302
5e1ca229ec 修正课时评论管理链接 2024-01-11 18:51:52 +08:00
xiaochong0302
680f1cf1bc 修复sync_learning时,course_user未更新active_time问题 2024-01-11 13:00:24 +08:00
xiaochong0302
b67011c041 修复主页simple模式免费课程模块样式问题 2024-01-08 11:21:49 +08:00
xiaochong0302
fd2e8d2aee 1.优化错误处理
2.更新layui2.9.3
2024-01-07 09:31:50 +08:00
xiaochong0302
78d538c816 清理代码 2023-12-30 15:23:53 +08:00
xiaochong0302
5ce45971e6 优化AccountSearchTrait 2023-12-28 21:31:59 +08:00
xiaochong0302
33fc75b9f8 1.精简chapter/lessons.volt
2.使用ServiceTrait精简代码
2023-12-27 16:05:23 +08:00
xiaochong0302
59e27e1443 修正用户active_time搜索条件 2023-12-25 20:18:41 +08:00
xiaochong0302
ce9f0eade0 修正用户active_time搜索条件 2023-12-25 20:18:13 +08:00
xiaochong0302
411ffe8f1c 统一layui-skin=switch属性位置 2023-12-21 09:30:41 +08:00
xiaochong0302
decf80273a 统一layui-skin=switch属性位置 2023-12-21 09:26:48 +08:00
xiaochong0302
db82de6f35 修正plan_id格式问题 2023-12-20 21:54:01 +08:00
xiaochong0302
52aa85b2ae 修正plan_id格式问题 2023-12-20 21:53:47 +08:00
xiaochong0302
6c33dbc724 修正课时发布switch开关问题 2023-12-20 21:39:25 +08:00
xiaochong0302
2714a048f8 修正课时发布switch开关问题 2023-12-20 21:38:27 +08:00
xiaochong0302
dd0c26d6ad v1.6.8 start 2023-12-20 21:17:10 +08:00
xiaochong0302
8e40019939 Merge branch 'koogua/v1.6.7' 2023-12-13 20:54:01 +08:00
xiaochong0302
fb01e61332 去除分类必选限制 2023-12-13 20:20:51 +08:00
xiaochong0302
da0cc73c12 优化变量名和排版 2023-12-13 12:53:35 +08:00
xiaochong0302
b192760deb 优化相关文章和问题 2023-12-12 17:18:24 +08:00
xiaochong0302
e0da7b71b3 调整内容缓存时间 2023-12-12 16:19:04 +08:00
xiaochong0302
56f909b5d2 调整推荐课程缓存时间 2023-12-11 17:47:07 +08:00
xiaochong0302
c859deec44 vip.js -> vip.index.js 2023-12-11 12:56:43 +08:00
xiaochong0302
435bc12035 增加问题推荐 2023-12-11 12:23:42 +08:00
xiaochong0302
dca1ccf79a 优化排版 2023-12-10 20:55:26 +08:00
xiaochong0302
817b32b067 放弃部分地方缓存的使用 2023-12-09 19:02:05 +08:00
xiaochong0302
51428ac97a 补充遗漏的批量删除点击事件 2023-12-09 09:01:18 +08:00
xiaochong0302
8f22cab282 优化批量删除后的跳转 2023-12-08 20:17:39 +08:00
xiaochong0302
982b1d5ca7 删除多余文件 2023-12-07 20:57:25 +08:00
xiaochong0302
f3fcb6956a beta 2023-12-07 17:09:28 +08:00
xiaochong0302
3dd5490bdb 阶段性优化 2023-12-06 20:24:09 +08:00
xiaochong0302
5268e6370c Merge remote-tracking branch 'origin/koogua/v1.6.7' into koogua/v1.6.7 2023-12-04 19:47:11 +08:00
xiaochong0302
79a678fa54 阶段性优化 2023-12-04 19:46:54 +08:00
xiaochong0302
0072b4f5fe 精简代码 2023-10-29 22:30:14 +08:00
koogua
51de0ed94b 字数统计加上图片字数 2023-10-01 11:05:53 +08:00
xiaochong0302
26e3e94881 修正绑定邮箱password未定义错误 2023-09-22 20:42:13 +08:00
xiaochong0302
0a86fc3f05 修正绑定邮箱password未定义错误 2023-09-22 20:41:42 +08:00
xiaochong0302
e905e7cb96 修正课程课件资源列表权限 2023-09-18 06:53:05 +08:00
xiaochong0302
2c881547b4 修正课程课件资源列表权限 2023-09-18 06:52:57 +08:00
xiaochong0302
7d54f0e933 增加匿名评价 2023-09-16 21:44:23 +08:00
xiaochong0302
1bef24f217 1.kg_course表增加索引
2.优化错误页
3.优化富文本内容长度获取
4.优化layer关闭窗口后发布状态同步
2023-09-16 20:51:31 +08:00
xiaochong0302
0dec52806b 优化直播测试的streamName解析 2023-09-04 10:53:47 +08:00
xiaochong0302
241d802fe1 直播页分享地址:full_url->share_url 2023-09-04 10:38:10 +08:00
xiaochong0302
66bd0965d6 去除课时列表中的课件属性 2023-09-03 10:54:55 +08:00
xiaochong0302
40380132a2 Merge branch 'koogua/v1.6.6'
# Conflicts:
#	app/Http/Admin/Services/Resource.php
2023-08-31 17:41:09 +08:00
xiaochong0302
ebd310caa6 v1.6.6 2023-08-31 17:18:05 +08:00
xiaochong0302
138b9d45ce 日常优化 2023-08-28 15:55:40 +08:00
xiaochong0302
504bf6d8e6 去除删除远程COS课件的逻辑 2023-08-11 15:54:11 +08:00
xiaochong0302
65b5190a05 去除删除远程COS课件的逻辑 2023-08-11 15:53:41 +08:00
xiaochong0302
f284a8ef92 修正邮箱注册提交按钮不可用问题 2023-08-03 16:57:15 +08:00
xiaochong0302
c584f25455 修正邮箱注册提交按钮不可用问题 2023-08-03 16:56:18 +08:00
xiaochong0302
85ba7911ac 优化cleanDemoDataTask 2023-08-02 17:59:47 +08:00
xiaochong0302
190117146f 优化tag表migration 2023-08-02 17:18:25 +08:00
xiaochong0302
c0e44a76d0 v1.6.6开始 2023-07-23 18:56:49 +08:00
xiaochong0302
0c9256751d 优化AuthTrait 2023-07-11 09:55:21 +08:00
xiaochong0302
1c0af6fa1e 去除后台登录页的captcha检查 2023-07-10 17:40:18 +08:00
xiaochong0302
4f18d78356 去除后台登录页的无用captcha代码 2023-07-10 15:08:44 +08:00
xiaochong0302
621b921862 v1.6.5发布说明 2023-07-05 16:58:42 +08:00
xiaochong0302
e48d831ce3 1.清理无用代码
2.递归函数增加返回值
2023-07-03 18:51:20 +08:00
xiaochong0302
30ece511df 1.优化日志清理
2.增加cli下带色输出
2023-07-03 16:23:11 +08:00
xiaochong0302
b519fd4d6d 1.去除腾讯验证码
2.使用本地验证码
2023-06-25 18:48:55 +08:00
xiaochong0302
fca03feb35 清理layui扩展引入 2023-06-24 17:00:54 +08:00
xiaochong0302
71898bf5ec 清理无用的计划任务 2023-06-23 19:57:21 +08:00
xiaochong0302
cf80b3c878 更新layui-v2.8.8 2023-06-23 19:50:51 +08:00
xiaochong0302
44b5633f23 更新layui-v2.8.8 2023-06-20 21:16:59 +08:00
xiaochong0302
f0fdd6ebbb 修正图文分享链接参数问题 2023-06-19 14:05:41 +08:00
xiaochong0302
c9ddb0abab 修正钉钉机器人webhook配置 2023-06-17 18:51:06 +08:00
xiaochong0302
13ff32343d Merge branch 'koogua/v1.6.4' 2023-06-15 21:45:30 +08:00
xiaochong0302
41c4fc45b2 更新版本号v1.6.4 2023-06-15 19:45:15 +08:00
xiaochong0302
9159e28b51 v1.6.4 2023-06-15 19:40:44 +08:00
xiaochong0302
36ef6ca37b 优化课程章节handleMeInfo 2023-06-15 18:55:31 +08:00
xiaochong0302
a72f44225f 1.优化课程章节权限
2.优化钉钉机器人
2023-06-15 18:05:27 +08:00
xiaochong0302
f7a3c0d736 优化Providers 2023-06-15 11:39:26 +08:00
xiaochong0302
fb5feb0759 优化通知 2023-06-15 11:32:59 +08:00
xiaochong0302
ce2329a71c 优化用户课程查找 2023-06-15 10:55:17 +08:00
xiaochong0302
5985576065 1.优化语法层面
2.增加推荐课程|文章|考试widget
2023-05-23 17:27:14 +08:00
xiaochong0302
cced354b2a Merge branch 'koogua/v1.6.4' of https://gitee.com/koogua/course-tencent-cloud into koogua/v1.6.4 2023-05-22 21:14:00 +08:00
xiaochong0302
f094f10011 恢复误删的AnswerList 2023-05-22 21:13:50 +08:00
koogua
2a055d9ad4 更新composer包 2023-05-22 19:20:14 +08:00
xiaochong0302
e3e5d20a7c 纠正单词评选错误 2023-05-12 18:52:11 +08:00
xiaochong0302
7322d1fc0d 优化分享URL 2023-05-11 21:54:20 +08:00
koogua
84d21d80da 优化me相关信息 2023-05-10 21:08:15 +08:00
xiaochong0302
772380adcd 优化订单确认页样式 2023-05-09 11:29:47 +08:00
xiaochong0302
5405e1652e 优化订单确认页样式 2023-05-09 11:26:02 +08:00
xiaochong0302
259859fae6 修正验证登录空口令问题 2023-05-08 23:41:39 +08:00
xiaochong0302
251c1348fa 修正验证登录空口令问题 2023-05-08 23:38:10 +08:00
xiaochong0302
a581b0d493 Merge branch 'koogua/v1.6.3' 2023-05-07 21:00:31 +08:00
xiaochong0302
464527fe67 v1.6.3 2023-05-07 20:59:01 +08:00
xiaochong0302
1b1c048cca 优化htmlprufier处理 2023-05-07 18:12:00 +08:00
xiaochong0302
d59a63079a 过滤html实体编码xss 2023-05-07 16:25:16 +08:00
xiaochong0302
5ca47be92c 优化课程过滤分组条件样式 2023-05-06 14:48:13 +08:00
xiaochong0302
a343b3c5f5 更新layui-v2.8.2 2023-05-05 15:37:46 +08:00
xiaochong0302
c639f89c7b 替换xiaochong0302/ip2region 2023-05-03 17:23:08 +08:00
xiaochong0302
bba2842967 升级layui-v2.8.1 2023-05-03 15:52:44 +08:00
xiaochong0302
14b2e1df20 优化语法相关 2023-05-03 15:18:54 +08:00
xiaochong0302
56bbb7d6fe 优化排序条件,改善分页重复问题 2023-03-08 19:49:01 +08:00
xiaochong0302
5a061ad9fb 修正手续费率设置为0无效的问题 2023-03-05 17:03:48 +08:00
xiaochong0302
fcd15c1a5f 去除未支付“新鲜”订单检查 2023-03-03 19:40:59 +08:00
xiaochong0302
df9d77cad2 1.强化文章|提问|课程列表参数检查
2.优化课程学习时长同步
2023-02-26 19:07:54 +08:00
xiaochong0302
d65e4cab43 Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud 2023-02-16 14:05:53 +08:00
koogua
7355e8c625 Merge branch 'koogua/v1.6.2'
# Conflicts:
#	CHANGELOG.md
2023-02-15 20:38:46 +08:00
koogua
59b3edc1c0 Merge remote-tracking branch 'gitee/koogua/v1.6.2' into koogua/v1.6.2 2023-02-15 19:47:15 +08:00
koogua
f5753da68b v1.6.2发布 2023-02-15 19:47:00 +08:00
koogua
d560e62405 v1.6.2发布 2023-02-15 19:41:24 +08:00
xiaochong0302
2bc5cbf1a9 优化Repo查询 2023-02-15 00:10:11 +08:00
xiaochong0302
ecb20a14f4 优化条件判断 2023-02-14 22:30:02 +08:00
xiaochong0302
74c08316f1 修正记忆播放问题 2023-02-12 17:09:21 +08:00
xiaochong0302
a3d62c71bf 腾讯云短信模板规则更新,同步更新短信内容 2022-12-31 17:04:15 +08:00
xiaochong0302
254a78f246 ServerMonitor资源监控阀值可配置 2022-12-20 16:36:13 +08:00
xiaochong0302
2a20d1eb2e v1.6.2开始 2022-12-15 11:08:00 +08:00
xiaochong0302
db077346e1 补充发行说明 2022-12-15 10:52:01 +08:00
koogua
8b501d8757 v1.6.1发布 2022-12-12 16:22:09 +08:00
koogua
1f996ab384 修正通知标记为已读,计数不归零问题 2022-12-12 16:07:01 +08:00
koogua
2145316913 添加套餐页面去除summary,和商业版保持一致 2022-12-12 16:02:38 +08:00
koogua
77228b99f0 Merge branch 'koogua/v1.6.1' of gitee.com:koogua/course-tencent-cloud into koogua/v1.6.1 2022-12-12 15:58:33 +08:00
xiaochong0302
1b25ccc30d 优化语法结构 2022-11-28 19:28:07 +08:00
koogua
3d42389012 修正播放器中央播放按钮显示问题 2022-11-17 18:05:45 +08:00
xiaochong0302
46beccb67a 优化腾讯云播放地址鉴权参数 2022-11-13 17:08:52 +08:00
koogua
7f9a63886f 优化学员学习记录显示 2022-11-10 12:08:46 +08:00
koogua
bd4d340f53 Merge branch 'koogua/v1.6.1' of gitee.com:koogua/course-tencent-cloud into koogua/v1.6.1 2022-11-07 10:34:19 +08:00
xiaochong0302
05837d6c5f 简化单章节层级显示 2022-11-06 23:19:15 +08:00
xiaochong0302
46176071b8 优化热门作者,答主和问题 2022-11-06 12:55:12 +08:00
koogua
a941d1129a 富文本编辑器增加粘贴图片和远程图片本地化 2022-11-02 15:01:25 +08:00
koogua
301557abbc 优化表单数据提交体验 2022-10-31 20:18:34 +08:00
xiaochong0302
372b996365 精简代码 2022-10-31 09:53:24 +08:00
xiaochong0302
3c5310b5bd Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud 2022-10-30 23:38:24 +08:00
koogua
6edbcc4638 v1.6.1开工 2022-10-28 17:05:24 +08:00
koogua
3e7082b251 修正大播放图标不居中问题 2022-10-28 15:41:37 +08:00
koogua
1825f2346f Merge branch 'koogua/v1.6.0' 2022-10-27 19:05:22 +08:00
koogua
dd2c3009a4 v1.6.0 2022-10-27 19:04:21 +08:00
xiaochong0302
6b6ccea185 更新composer.json 2022-10-26 00:34:15 +08:00
xiaochong0302
fd1c209a1d 更新composer.json 2022-10-26 00:32:14 +08:00
koogua
04c0ac186f 优化热门答主 2022-10-21 21:00:07 +08:00
koogua
5032c0b432 优化热门问题和热门答主 2022-10-21 20:30:50 +08:00
koogua
d8c5a3d0a2 优化通知计数 2022-10-21 17:55:31 +08:00
koogua
a3cb6d757a 单页和帮助增加浏览属性 2022-10-21 15:09:41 +08:00
koogua
7153d4e5ef 1.导航教师->师资
2.播放器中间增加播放按钮
2022-10-10 17:58:25 +08:00
koogua
63a1f6eb1d 优化内容表格样式 2022-10-02 15:42:43 +08:00
koogua
810956cf36 logo添加首页链接 2022-09-29 18:29:45 +08:00
koogua
2ece258a67 调整退款收费费率范围 2022-09-29 18:13:37 +08:00
koogua
fc4ee4cf49 更新composer包 2022-09-22 11:10:58 +08:00
koogua
de38cc756d 调整layui-main样式更新导致的尺寸问题 2022-09-21 17:48:34 +08:00
koogua
d840f5fe71 更新包版本 2022-09-21 17:08:44 +08:00
koogua
1c42df299e Merge branch 'koogua/v1.5.9' 2022-09-20 17:58:22 +08:00
koogua
370ffa4250 优化错误日志 2022-09-20 17:55:49 +08:00
koogua
c17447784c 绑定页增加用户协议和隐私政策 2022-09-19 18:51:47 +08:00
koogua
79cc6b9c9e 增加用户协议和隐私政策 2022-09-19 17:58:52 +08:00
koogua
06607e7f2e 升级layui v2.7.6 2022-09-17 18:51:12 +08:00
koogua
9ebbf2cecc 优化router扫描规则 2022-09-16 18:44:33 +08:00
koogua
79a2253918 1.文章单页等增加关键字
2.专题增加封面上传
2022-09-15 20:39:49 +08:00
koogua
c801559b62 更新微博分享链接 2022-09-15 16:08:46 +08:00
koogua
3854a082d3 1.更新默认图片
2.更新直播名格式化
2022-09-15 16:08:04 +08:00
koogua
8d64969040 调整Notice目录结构 2022-09-08 20:01:11 +08:00
koogua
b79d6e5588 去除user全文索引相关 2022-09-06 17:30:06 +08:00
koogua
42f591173d 修正内容图片上传问题 2022-09-06 11:03:43 +08:00
koogua
93ec72faf6 修正内容图片上传问题 2022-09-06 11:03:19 +08:00
koogua
fbcc721828 去除group残留 2022-09-06 10:58:02 +08:00
koogua
bf3b84638a Merge branch 'koogua/v1.5.8' 2022-08-31 10:31:30 +08:00
koogua
1093f52350 Merge branch 'koogua/v1.5.8' into develop 2022-08-31 10:31:06 +08:00
koogua
a47e63340e 优化文章缩略图尺寸 2022-08-31 10:30:16 +08:00
koogua
73d04e3c63 Merge branch 'koogua/v1.5.8' 2022-08-31 10:28:38 +08:00
koogua
ea78fd3c5c 优化文章缩略图尺寸 2022-08-31 10:27:03 +08:00
koogua
6870380091 优化用户登录,用户注册,忘记密码 2022-08-28 10:32:25 +08:00
koogua
13873dcb0b sitemap条目增加过滤条件 2022-08-24 14:51:18 +08:00
koogua
b60f8fe485 优化登录/注册/忘记密码页 2022-08-22 15:06:52 +08:00
koogua
21f79dad80 整理migrations 2022-08-19 18:06:10 +08:00
koogua
923095700f 整理migrations 2022-08-19 17:10:30 +08:00
koogua
290fda610b 修复升级cos-sdk带来的参数检查错误 2022-08-19 15:31:45 +08:00
koogua
9b55b04e5f 修复升级cos-sdk带来的参数检查错误 2022-08-19 15:31:34 +08:00
koogua
4c9557c5c8 优化腾讯云短信错误日志 2022-08-17 17:17:25 +08:00
koogua
2628f6b7d7 1.整理查询构建语句
2.整理前台编辑器页面
2022-08-15 17:22:33 +08:00
koogua
20fb468f0d 整理优化css 2022-08-12 17:21:29 +08:00
koogua
cd9422afc1 1.清理群组残留
2.优化HtmlPurifier缓存目录自动创建
2022-08-09 16:43:55 +08:00
koogua
107c54dba9 v1.5.6 2022-08-08 17:11:28 +08:00
koogua
5d2a4b8b11 kindeditor替换vditor
markdown转html
2022-08-01 18:57:58 +08:00
koogua
cd3922e3dd 去除群组和微聊 2022-08-01 16:43:55 +08:00
koogua
0b161d52bb v1.5.5发布 2022-07-27 15:51:43 +08:00
koogua
dc85029241 1.优化CsrfToken
2.去除无实际作用的OptimizeTable脚本
2022-07-22 16:03:43 +08:00
koogua
f5719c2ee7 修正帐号锁定后还能登录的问题 2022-07-15 17:35:22 +08:00
koogua
175737f274 1.增加清理demo数据脚本
2.用户课程列表增加角色限定
3.精简模块加载和路由扫描
2022-07-15 10:28:08 +08:00
koogua
34da1deae6 1.修正问题分类列表查询条件
2.发货增加noMatchedHandler
2022-07-07 16:28:17 +08:00
koogua
d1917781fb Merge branch 'koogua/v1.5.4'
# Conflicts:
#	app/Library/AppInfo.php
2022-06-16 09:24:01 +08:00
koogua
21f92166d2 v1.5.4 2022-06-16 09:12:43 +08:00
koogua
35a8785177 优化视频文件上传页面 2022-06-09 20:32:17 +08:00
koogua
7945644f3a 优化VodEventTask 2022-06-09 10:26:02 +08:00
koogua
7f9314a111 改进上传转码流程 2022-06-08 21:47:47 +08:00
koogua
b5ceb155f3 增加迁移SettingTrait 2022-06-08 09:22:28 +08:00
koogua
83a39e5648 1.增加积分兑换会员
2.优化课程和套餐发货
3.增加isp和电子执照配置
2022-06-07 21:55:36 +08:00
koogua
d86ee20ced 修正获取子分类查询条件 2022-06-04 16:13:33 +08:00
koogua
23305e1738 增加获取视频时长补充机制 2022-06-04 16:12:06 +08:00
koogua
f1ceae2301 Merge branch 'koogua/v1.5.3' 2022-05-24 10:15:58 +08:00
koogua
e272bfc585 更新版本号 2022-05-24 10:15:43 +08:00
koogua
d57ed792a4 Merge branch 'koogua/v1.5.3' 2022-05-23 15:00:23 +08:00
koogua
a06edb6f4b vditor本地化 2022-05-23 14:56:24 +08:00
koogua
8fccecb372 vditor本地化 2022-05-23 14:52:31 +08:00
koogua
450b4c5210 Merge branch 'koogua/v1.5.2' 2022-04-30 11:39:53 +08:00
koogua
af65adaf94 1.补充话题列表课程数据结构
2.调整发送验证码相关样式
3.优化套餐和话题下拉课程数据显示
4.去除礼物详情中多出来的"}}"标签
5.修正关闭秒杀订单时没有回填库存的问题
6.vditor编辑器切换为七牛cdn加速
2022-04-30 11:23:33 +08:00
koogua
d59d52b771 修正验证码关闭后台逻辑 2022-03-23 09:55:38 +08:00
koogua
c77e1801ac 修正验证码关闭后台逻辑 2022-03-23 09:55:07 +08:00
koogua
70c8767789 修正验证码关闭后元素未定义问题 2022-03-23 09:45:39 +08:00
koogua
6f679e74e9 修正验证码关闭后元素未定义问题 2022-03-23 09:45:17 +08:00
koogua
f7c835b5ca Merge branch 'koogua/v1.5.1' 2022-03-22 19:39:14 +08:00
koogua
1597b2b968 优化每日登录积分 2022-03-22 19:35:12 +08:00
koogua
e5bcd500d3 调整积分兑换相关 2022-03-22 17:38:47 +08:00
koogua
4345bdeb26 v1.5.1 beta 2022-03-13 17:05:35 +08:00
koogua
d697a7bf97 增加验证码开关 2022-02-19 18:05:36 +08:00
koogua
d736b5ac61 Merge branch 'develop' 2022-02-17 11:09:57 +08:00
koogua
ba512b04c8 v.1.5.0 release 2022-02-17 11:07:42 +08:00
koogua
0155e55e4b 功能优化 2022-01-18 18:03:48 +08:00
koogua
87097afad3 Merge remote-tracking branch 'gitee/develop' into develop
# Conflicts:
#	CHANGELOG.md
#	app/Services/Logic/Notice/ConsultReply.php
#	app/Services/Logic/Notice/LiveBegin.php
#	app/Services/Logic/Notice/OrderFinish.php
#	app/Services/Logic/Notice/PointGoodsDeliver.php
#	app/Services/Logic/Notice/RefundFinish.php
2022-01-13 12:28:29 +08:00
koogua
e3e09a92ad 修正微信通知和短信不能同时发的问题 2022-01-13 12:27:36 +08:00
koogua
6e90d04da9 v1.5.0 2022-01-13 11:01:06 +08:00
koogua
5ff9ae51f0 v1.5.0 2022-01-13 11:00:16 +08:00
koogua
c13b45d991 补充课程分类 2021-12-31 14:14:02 +08:00
koogua
495057e8ce 补充课程分类 2021-12-31 14:13:42 +08:00
koogua
9c8882bac6 短信配置增加region选项 2021-12-31 09:43:46 +08:00
koogua
45863db645 短信配置增加region选项 2021-12-31 09:37:38 +08:00
koogua
a50889df71 Merge branch 'koogua/v1.4.9' 2021-12-30 20:07:56 +08:00
koogua
433b31e0ae v.1.4.9 2021-12-30 18:38:43 +08:00
koogua
b889569d77 Merge branch 'ctc/v1.4.8' 2021-11-28 17:33:12 +08:00
koogua
e7abda6daf v1.4.8 2021-11-28 17:24:03 +08:00
koogua
b1f09d4008 Merge branch 'koogua/v1.4.7' 2021-10-28 16:16:20 +08:00
koogua
402ae2468b 1.清理分享链接参数
2.增加账号泛滥登录检查
2021-10-28 16:16:15 +08:00
koogua
2564b1adc0 Merge branch 'koogua/v1.4.7' into develop 2021-10-28 16:13:33 +08:00
koogua
725e6fc261 1.清理分享链接参数
2.增加账号泛滥登录检查
2021-10-28 16:11:30 +08:00
koogua
5cc94b0c01 v.1.4.7 release 2021-10-28 16:10:16 +08:00
koogua
4628a272c8 v.1.4.7 beta1 2021-10-27 18:16:40 +08:00
koogua
3fbb68f713 修正首页缓存虚拟用户数问题 2021-10-18 18:57:58 +08:00
koogua
d03999ebf3 修正首页缓存虚拟用户数问题 2021-10-18 18:57:27 +08:00
koogua
e6fe4dabfb Merge branch 'koogua/v1.4.6' 2021-10-18 11:22:31 +08:00
koogua
7d2b9c87b7 v1.4.6 2021-10-18 11:20:44 +08:00
koogua
a699fdba1f 修复oauth登录code reused问题 2021-10-18 09:51:46 +08:00
koogua
d6da068320 修复oauth登录code reused问题 2021-10-18 09:50:49 +08:00
koogua
76c46348d7 增加虚假课程订阅数逻辑 2021-10-17 18:55:00 +08:00
koogua
3c774d2b89 修正咨询和评价点赞状态问题 2021-10-17 14:48:35 +08:00
koogua
dfe92dfb1b 优化PC页面到手机的自动跳转,修复管理后台若干问题 2021-10-16 16:16:45 +08:00
koogua
878b8c4e54 1.修正获取answer权限判断问题
2.order接口补充缺失权限判断
2021-10-09 09:50:54 +08:00
koogua
57c7d875ad 1.修正获取answer权限判断问题
2.order接口补充缺失权限判断
2021-10-09 09:49:16 +08:00
koogua
416a671f3f 修正进入直播间消息id缺失问题 2021-10-08 18:40:51 +08:00
koogua
525ac5d67a 修正进入直播间消息id缺失问题 2021-10-08 18:40:13 +08:00
koogua
fffb2c4e8e Merge branch 'koogua/v1.4.5' 2021-10-08 11:23:00 +08:00
koogua
3d1b8f1274 修正ImActiveGroupList缓存查询条件引发的错误 2021-10-08 11:20:58 +08:00
koogua
b29ae1ef2f Merge branch 'koogua/v1.4.5' 2021-10-08 08:41:15 +08:00
koogua
8abe4d1e8e 完善问题me信息 2021-10-07 15:58:06 +08:00
koogua
e2e3479851 用会退款列表中增加me属性 2021-10-07 14:48:32 +08:00
koogua
2a30589716 修正群组信息错误 2021-10-07 13:16:56 +08:00
koogua
febf7d9982 完善异常处理逻辑 2021-10-06 20:28:13 +08:00
koogua
93279a53e2 完善shallowUserInfo处理逻辑 2021-10-06 18:39:50 +08:00
koogua
d94001a4a4 1.去除模型中删除关联发布操作
2.整理查询逻辑
2021-10-06 17:01:49 +08:00
koogua
8cfcc74b2a 增加退出群组和解除好友接口 2021-10-04 18:56:08 +08:00
koogua
1fe8c289a5 修正websocket连接地址 2021-10-03 14:53:17 +08:00
koogua
6495cbfbe0 修正websocket连接地址 2021-10-03 11:55:22 +08:00
koogua
1f46f35a42 修正websocket连接地址 2021-10-03 09:49:40 +08:00
koogua
b64168120a 修正文章,提问,回答,课时评论查询参数 2021-10-01 17:30:58 +08:00
koogua
cebd2f09e6 格式化课程评分 2021-09-30 11:07:48 +08:00
koogua
acc25bb5dc 抽离文章评论和私有操作 2021-09-29 21:01:01 +08:00
koogua
5009ae36a0 修复评论列表查询条件 2021-09-28 21:14:15 +08:00
koogua
124b28856f 增加删除文章和提问接口 2021-09-28 17:33:52 +08:00
koogua
53295ed980 1.优化订单数据结构
2.无权限查看课时不返回播放地址
2021-09-28 15:07:34 +08:00
koogua
5617a5f1c1 v1.4.5 beta4 2021-09-26 22:31:28 +08:00
koogua
c7c9ab4f59 v1.4.5 beta3 2021-09-22 21:48:49 +08:00
koogua
616c7aa40d v1.4.5 beta2 2021-09-21 08:14:06 +08:00
koogua
b65c66d99c v1.4.5 beta1 2021-09-20 17:50:27 +08:00
koogua
15d822a934 修正课程列表直播状态 2021-09-17 16:53:11 +08:00
koogua
7134a2c666 修正课程列表直播状态 2021-09-17 16:51:16 +08:00
koogua
adeb4d530d Merge branch 'koogua/v1.4.4' 2021-09-17 10:27:45 +08:00
koogua
61b4e7696e Merge branch 'koogua/v1.4.4' into develop 2021-09-17 10:26:05 +08:00
koogua
645409c849 调整markdown安全级别 2021-09-17 10:05:25 +08:00
koogua
3fd3cb1fbe 增加登录选择配置 2021-09-16 22:31:41 +08:00
koogua
d0112d501e 优化公众号订阅事件 2021-09-13 17:30:40 +08:00
koogua
1c880d0c56 修正咨询published查询条件 2021-09-11 13:14:24 +08:00
koogua
7ac456bb67 修正微信支付验证浮点数精度丢失问题 2021-09-08 12:18:06 +08:00
koogua
b9d78da1ce v1.4.4 preview 2021-09-07 17:29:23 +08:00
koogua
4bba205420 Merge branch 'koogua/fix-vod-setting' 2021-09-03 13:10:23 +08:00
koogua
6b2b3891c6 修复视频清晰度配置序列化问题 2021-09-03 13:02:28 +08:00
koogua
c1d3a98620 v1.44 beta 2021-08-31 21:48:32 +08:00
koogua
a1fc1d4956 Merge branch 'koogua/v1.4.3' 2021-08-23 10:37:20 +08:00
koogua
74f34752e5 修正mp4转码模板hd清晰度 2021-08-23 10:35:16 +08:00
koogua
7c5b11e5c0 Merge branch 'koogua/v1.4.3' 2021-08-23 10:26:32 +08:00
koogua
ee6b90d18f 增加联系方式开启开关 2021-08-23 09:45:36 +08:00
koogua
9815f98ff9 v1.4.3 2021-08-22 18:01:47 +08:00
koogua
7bf5779878 Merge branch 'master' of github.com:xiaochong0302/course-tencent-cloud 2021-08-12 20:40:33 +08:00
koogua
33be4028b6 Merge branch 'koogua/v1.4.2' 2021-08-12 20:14:03 +08:00
koogua
bcc9979ef7 v1.4.2 beta2 2021-08-12 18:33:49 +08:00
koogua
de7fd43cd4 v1.4.2 beta1 2021-08-12 16:26:00 +08:00
jacky huang
6412c83671
Create SECURITY.md 2021-08-09 20:06:35 +08:00
koogua
b2efe1f61f Merge branch 'koogua/v1.4.1' 2021-08-08 21:05:22 +08:00
koogua
826040d19d v1.4.1 beta1 2021-08-08 17:19:15 +08:00
koogua
2102ee8e4a Merge branch 'koogua/v1.4.0' 2021-08-03 17:25:00 +08:00
koogua
351572e3df Merge branch 'koogua/v1.4.0' into develop 2021-08-03 17:24:16 +08:00
koogua
d55c51c425 v1.4.0 更新版本号 2021-08-03 15:52:17 +08:00
koogua
ce640342f2 v1.4.0 beta1 2021-08-03 15:47:55 +08:00
koogua
1e630967d1 恢复遗漏的数据迁移调用 2021-07-28 10:39:13 +08:00
koogua
6174b3fc7b 恢复遗漏的数据迁移调用 2021-07-28 10:37:57 +08:00
koogua
ef545c8155 Merge branch 'koogua/v1.3.9' 2021-07-26 09:29:32 +08:00
koogua
43be2ef310 修正数据迁移未导入包 2021-07-26 09:28:40 +08:00
koogua
698d0d963b Merge branch 'koogua/v1.3.9' 2021-07-25 21:40:48 +08:00
koogua
3cf1f51bb3 修正外连播放地址为空500错误 2021-07-25 21:39:18 +08:00
koogua
a86957f0b1 Merge branch 'koogua/v1.3.9'
# Conflicts:
#	app/Library/AppInfo.php
2021-07-25 17:07:45 +08:00
koogua
97e7db2c74 v1.3.9 beta4 2021-07-24 15:23:13 +08:00
koogua
76a558bab7 v1.3.9 beta3 2021-07-24 15:11:32 +08:00
koogua
25b935edeb v1.3.9 beta2 2021-07-23 20:12:44 +08:00
koogua
8d43d27523 v1.3.9 beta 2021-07-23 15:10:55 +08:00
koogua
69f41d71c7 热门问题增加过滤条件 2021-07-13 10:04:49 +08:00
koogua
a896856951 热门问题增加过滤条件 2021-07-13 10:04:38 +08:00
koogua
78079aeafb 修正版本号 2021-07-12 10:14:01 +08:00
koogua
a1d38eee9a 修正版本号 2021-07-12 10:11:28 +08:00
koogua
bf5686f6d9 Merge branch 'koogua/v1.3.8' 2021-07-11 16:14:50 +08:00
koogua
9f44ebda48 Merge branch 'koogua/v1.3.8' into develop 2021-07-11 16:14:08 +08:00
koogua
a41137580d v1.3.8发布 2021-07-11 16:12:50 +08:00
koogua
9b22fd6656 清理无用文件,处理记录逻辑删除后的浏览问题 2021-07-10 21:48:49 +08:00
koogua
c4bf67a616 Merge branch 'koogua/fix-live' 2021-06-23 15:48:35 +08:00
koogua
952051bf82 修正后台测试直播问题 2021-06-23 15:46:46 +08:00
koogua
c546e59f3f Merge branch 'fix-uc-review' 2021-06-23 12:52:48 +08:00
koogua
5c9e44f3d5 1.修复uc删除收藏问题
2.修复群员管理删除按钮问题
3.修复评价按钮单击问题
2021-06-23 12:51:16 +08:00
koogua
c55f071ebe Merge branch 'koogua/fix-comment-review' 2021-06-23 11:04:31 +08:00
koogua
44c5b0ce04 修复评论审核路由问题 2021-06-23 11:02:50 +08:00
koogua
c11fab7027 Merge branch 'koogua/fixed-teacher-consults' 2021-06-21 16:40:50 +08:00
koogua
31c87faeaf Merge branch 'koogua/fixed-teacher-consults' into develop 2021-06-21 16:40:33 +08:00
koogua
5900bb0f33 重写教师咨询获取方式 2021-06-21 16:37:14 +08:00
koogua
2366878113 Merge branch 'koogua/fix-layarea' 2021-06-21 11:31:38 +08:00
koogua
5f5532859e 修复layarea加载问题 2021-06-21 11:30:02 +08:00
koogua
e2a03515a2 Merge branch 'koogua/fixed-teacher-consults' 2021-06-19 18:09:04 +08:00
koogua
7c4b6fff82 修复记录为空分页问题 2021-06-19 18:07:20 +08:00
koogua
8215e4c18f Merge branch 'koogua/fix-vod-lesson' 2021-06-19 10:58:58 +08:00
koogua
10e99c818e 复原腾讯云点播的地址格式 2021-06-19 10:55:13 +08:00
koogua
1d09a2e005 Merge branch 'koogua/v1.3.7' 2021-06-15 16:24:34 +08:00
koogua
bbc88be3a3 修正小组成员跳转链接 2021-06-15 16:21:50 +08:00
koogua
12f76989f5 更新版本号 2021-06-13 16:43:00 +08:00
koogua
3bd4083a22 Merge branch 'koogua/v1.3.7' 2021-06-13 15:53:00 +08:00
koogua
0336a54911 1.源文件增加版权信息
2.群组状态和课程协同
2021-06-13 15:49:47 +08:00
koogua
6245897f4b 1.源文件增加版权信息 2021-06-13 15:48:32 +08:00
koogua
1d2f1dd266 1.更改模块继承基类
2.升级layui到2.6.8
3.升级腾讯云播放器
4.点播增加外链支持
2021-06-12 12:34:40 +08:00
koogua
c994c9e05e Merge branch 'koogua/v1.3.6' 2021-06-03 21:11:55 +08:00
koogua
72c5b7e77c 清理无用引用 2021-06-03 21:07:57 +08:00
koogua
57f587f4c4 v1.3.6阶段提交,cherry-pick 2021-06-03 12:11:34 +08:00
koogua
92c2225d47 v1.3.6阶段提交 2021-06-01 12:44:15 +08:00
koogua
a4d50205df Merge branch 'koogua/v1.3.5-hotfix' 2021-05-22 09:35:39 +08:00
koogua
51a20a12d6 忽略xs.question.ini 2021-05-22 09:35:10 +08:00
koogua
5597be84b2 Merge branch 'koogua/v1.3.5' 2021-05-20 19:52:51 +08:00
koogua
713a39314e 修正统计报表方法名单复数问题 2021-05-20 19:43:57 +08:00
koogua
57f5c0fe72 v1.3.5阶段提交 2021-05-20 19:30:32 +08:00
koogua
b58cb44f04 v1.3.5阶段提交 2021-05-20 18:50:50 +08:00
koogua
d9c4ffa7d7 Merge branch 'koogua/hotfix-1.3.4' into koogua/v1.3.5 2021-05-16 19:19:37 +08:00
koogua
6254ac94ca v1.3.5阶段提交 2021-05-16 19:19:20 +08:00
koogua
dc4d03762a Merge branch 'koogua/hotfix-1.3.4' 2021-05-15 15:47:36 +08:00
koogua
ca30c1732c 1.修复添加文章时未定义referer报错
2.修正后台添加文章未定义category_id
3.修正后台审核统计
2021-05-15 15:46:39 +08:00
koogua
c53d14c0c5 Merge branch 'koogua/hotfix-1.3.4' 2021-05-15 15:27:01 +08:00
koogua
141993a93c 1.修复添加文章时未定义referer报错
2.修正后台添加文章未定义category_id
2021-05-15 15:25:18 +08:00
koogua
d525116d9b Merge branch 'koogua/fix-add-tag' 2021-05-15 14:09:46 +08:00
koogua
cc19004c12 修复添加标签时的报错 2021-05-15 14:07:03 +08:00
koogua
253e09b79e 完善积分 2021-05-13 20:30:52 +08:00
koogua
aa40087bf1 完善积分 2021-05-13 20:30:20 +08:00
koogua
1fc2b93334 完善文章和提问浏览权限 2021-05-13 19:44:11 +08:00
koogua
1a15ad58c9 阶段提交 2021-05-13 17:50:39 +08:00
koogua
c7a84e60df 阶段提交 2021-05-12 20:43:10 +08:00
koogua
863505dcca 阶段提交 2021-05-12 20:41:24 +08:00
koogua
661034f3c1 阶段提交 2021-05-10 21:35:07 +08:00
koogua
caa34d2675 v1.3.4阶段提交 2021-05-07 19:34:31 +08:00
dongye
73a2e21cd6 !66 修复Tag添加错误的BUG
* 添加tag排序字段未添加问题
* update app/Http/Admin/Views/tag/add.volt. 增加是否发布选项,Fix 不能添加BUG
2021-04-30 10:46:01 +08:00
koogua
1ce43f6a75 Merge branch 'develop' 2021-04-29 18:41:00 +08:00
koogua
b38f094ed2 去除api中的无用方法 2021-04-29 18:03:35 +08:00
koogua
0cc2f10850 更新提交文章后跳转到用户中心 2021-04-29 17:22:24 +08:00
koogua
c7dfeed563 v1.3.3 fixed 2021-04-29 17:08:28 +08:00
koogua
f05ad4bb67 v1.3.3 preview 2021-04-28 20:40:18 +08:00
koogua
68b3b652a1 Merge branch 'koogua/v1.3.2' 2021-04-20 21:21:30 +08:00
koogua
1778b25c25 v1.3.2 2021-04-20 21:16:48 +08:00
koogua
6e4711e3bb Merge branch 'koogua/I3IBIU' into develop 2021-04-20 09:39:41 +08:00
koogua
d47ba77ea5 Merge branch 'koogua/I3IREK' into develop 2021-04-20 09:39:20 +08:00
koogua
f48f0c2545 Merge branch 'koogua/I3IVLN' into develop 2021-04-20 09:38:43 +08:00
koogua
8792688eed 评论功能阶段性提交 2021-04-19 20:16:41 +08:00
koogua
aef8e93fca Merge branch 'koogua/I3J723' 2021-04-16 18:16:25 +08:00
koogua
da943c3269 修复课程二级分类错位 2021-04-16 18:15:21 +08:00
koogua
bf2cbf305a Merge branch 'koogua/I3IVLN' 2021-04-15 10:37:26 +08:00
koogua
0f11248867 修复PageController中替换不充分导致的命名空间不存在 2021-04-15 10:36:37 +08:00
koogua
005e7df57b 修复轮播图无法保存数据 2021-04-14 15:01:54 +08:00
koogua
0f673dff3f 增加开启和关闭站点终端命令 2021-04-10 16:05:13 +08:00
koogua
8fdf9a77df xs.article.ini加入忽略 2021-04-10 15:08:04 +08:00
koogua
9173a1974d v1.3.1 2021-04-10 11:47:41 +08:00
koogua
35294379e3 Merge branch 'koogua/I3EBEO' into koogua/v1.3.1
# Conflicts:
#	app/Services/Logic/Consult/ConsultLike.php
#	app/Services/Logic/Review/ReviewLike.php
#	app/Services/Logic/User/Console/FavoriteList.php
#	app/Services/Logic/User/FavoriteList.php
2021-04-09 17:56:15 +08:00
koogua
9bb6946298 Merge branch 'koogua/I3E5UT' into koogua/v1.3.1
# Conflicts:
#	app/Services/Logic/Verify/EmailCode.php
2021-04-09 17:45:39 +08:00
koogua
c5ef9a2b2d 专栏阶段性提交2 2021-04-09 17:35:31 +08:00
koogua
d98b936969 专栏阶段性提交 2021-04-08 19:58:30 +08:00
koogua
51899d8c81 修正file_transcode 2021-03-30 20:07:54 +08:00
koogua
e7633cc723 修正邮件验证码命名空间 2021-03-30 11:20:27 +08:00
koogua
341168a9e1 调整命名空间别名 2021-03-30 11:05:07 +08:00
koogua
08b764c26c Merge branch 'koogua/I3E2LN' 2021-03-29 17:21:32 +08:00
koogua
ce84d79904 修正后台微信公众号设置路由不存在问题 2021-03-29 17:21:03 +08:00
koogua
0c964b85a6 修正im头像路径 2021-03-26 15:23:08 +08:00
koogua
f6ff5db852 Merge branch 'koogua/I3CC5N'
# Conflicts:
#	app/Models/ImGroup.php
#	app/Models/ImUser.php
2021-03-26 15:20:35 +08:00
koogua
6c86f914cc 增加面授模型,重构群组成员管理 2021-03-26 15:15:37 +08:00
koogua
4e69f1b43e 修正chapter attrs字段序列化问题 2021-03-23 10:43:15 +08:00
koogua
252d3e70c5 修正xm-select遗漏的问题 2021-03-22 20:01:57 +08:00
koogua
8849f706b9 修正IM用户和群组头像问题 2021-03-22 16:08:16 +08:00
koogua
80678c725b Merge branch 'develop' 2021-03-20 18:15:18 +08:00
koogua
a95aa655cd 课程,套餐默认封面互换 2021-03-20 17:44:06 +08:00
koogua
3bb613b2b3 修正封面问题 2021-03-20 17:34:20 +08:00
koogua
418393f45a v1.2.9版本发布 2021-03-20 16:17:45 +08:00
koogua
911a65aab0 Merge branch 'koogua/I2EJHG' into develop 2021-03-20 16:02:25 +08:00
koogua
47e03cd82b 优化 2021-03-20 15:59:24 +08:00
koogua
88bdab6936 秒杀功能+优化 2021-03-18 20:12:27 +08:00
koogua
75481f09a1 更新phinx默认环境配置项 2021-03-09 17:27:38 +08:00
koogua
81c134346c Merge branch 'develop' 2021-03-09 11:10:34 +08:00
koogua
448a53cfb6 v1.2.8 2021-03-09 11:08:36 +08:00
koogua
563d53d9e2 Merge branch 'koogua/I3A937' into develop 2021-03-07 15:31:24 +08:00
koogua
0ea1e84003 Merge branch 'koogua/I39Y7V' into develop 2021-03-07 15:30:46 +08:00
koogua
e51d44f5ea Merge branch 'koogua/I39Y6L' into develop 2021-03-07 15:30:12 +08:00
koogua
d7d47e6c8f 增加手续费逻辑 2021-03-06 18:28:21 +08:00
koogua
64dc731b23 会员期限价格等可设置 2021-03-04 20:44:56 +08:00
koogua
b0112cafce 增加不可退款选项 2021-03-04 16:35:01 +08:00
koogua
6acc168338 wechat.oa相关路由重命名 2021-03-04 11:30:21 +08:00
koogua
b8d2523435 WechatOfficialAccountController.php重命名 2021-03-04 11:12:34 +08:00
koogua
24f94088c3 WechatOfficialAccountController.php重命名 2021-03-04 11:04:06 +08:00
koogua
62aa639d9f Merge branch 'koogua/I399X5' 2021-03-04 10:51:56 +08:00
koogua
4d4685d798 Merge branch 'koogua/I399X5' into develop 2021-03-03 20:22:32 +08:00
koogua
0fc11134ca 修复获取通知模板ID问题 2021-03-03 20:22:07 +08:00
koogua
c2d0316281 Merge branch 'koogua/I399X5' into develop 2021-03-03 19:47:28 +08:00
koogua
dffa813b0a 修复登录通知问题 2021-03-03 19:46:23 +08:00
koogua
a6d6806629 Merge branch 'koogua/I399X5' into develop 2021-03-03 19:26:03 +08:00
koogua
4ce06d9a23 修复商品发货通知参数问题 2021-03-03 19:24:59 +08:00
koogua
6b75756d97 Merge branch 'koogua/I399X5' into develop 2021-03-03 17:53:31 +08:00
koogua
9d4225f663 整理migration 2021-03-03 17:29:27 +08:00
koogua
c0eb16f850 Merge branch 'koogua/hotfix-user-cache' 2021-03-03 11:34:56 +08:00
koogua
cb09e62649 1.修正购买vip时没有设置vip=1的错误
2.getCurrentUser,getLoginUser增加缓存选项
2021-03-03 11:33:48 +08:00
koogua
da1d35399d 整理通知相关以及deleted字段相关 2021-03-03 10:25:05 +08:00
koogua
3838d95dc4 整理通知相关以及deleted字段相关 2021-03-02 20:14:47 +08:00
koogua
86c66baece 整理通知相关以及deleted字段相关 2021-03-02 19:57:57 +08:00
koogua
08b0cd0c71 Merge branch 'develop' 2021-02-26 19:19:17 +08:00
koogua
92a9dfb7af Merge branch 'develop' of https://github.com/xiaochong0302/course-tencent-cloud into develop 2021-02-26 15:34:48 +08:00
koogua
55401cf451 版本发布信息改用ajax异步获取 2021-02-26 15:06:38 +08:00
koogua
ab3e04c8a2 Merge branch 'koogua/v1.2.7' of https://gitee.com/koogua/course-tencent-cloud into koogua/v1.2.7 2021-02-26 11:23:35 +08:00
koogua
e576cdefe1 前台首页部件显示增加非空判断,后台角色管理要不可编辑 2021-02-26 11:08:52 +08:00
koogua
7f3717094e 前台首页部件显示增加非空判断 2021-02-26 10:35:43 +08:00
koogua
156b28b79e 查漏补缺 2021-02-25 20:57:39 +08:00
koogua
2a0a039da6 合并dingtalk 2021-02-23 20:36:37 +08:00
koogua
1e1fed67fb Merge branch 'koogua/dingtalk-notice' into develop 2021-02-23 20:27:19 +08:00
koogua
054bccadfb 替换layui-verify为lay-verify 2021-02-23 15:37:55 +08:00
koogua
7acfaf17a9 dingtalk通知阶段提交 2021-02-22 11:38:19 +08:00
koogua
d798a5b609 dingtalk通知阶段提交 2021-02-22 11:31:21 +08:00
jacky huang
cb8684fbe0
Merge branch 'master' into develop 2021-02-18 21:43:29 +08:00
koogua
c4f1adb27f Merge branch 'develop'
# Conflicts:
#	app/Models/Course.php
#	db/migrations/schema.php
2021-02-18 21:24:31 +08:00
koogua
6abca790bc 修复file_transcode 2021-02-18 21:20:23 +08:00
koogua
179f27c20a 修复file_transcode 2021-02-16 16:47:26 +08:00
koogua
41dc730651 去除beforeCreate方法中的status状态 2021-02-15 21:38:54 +08:00
koogua
bb38d90d53 去除退款延迟 2021-02-15 21:12:03 +08:00
koogua
122b4adfa8 v1.2.6预览版01 2021-02-14 21:41:38 +08:00
winzer
bc48169ff9 更新价格验证
(cherry picked from commit 3d286baf91e1c6130ebb1db7831d4bb01c8b06e8)
2021-02-13 18:35:04 +08:00
winzer
7f7636b953 增加原始价格,市场价改名为优惠价 2021-02-13 18:33:57 +08:00
winzer
a5cca0e899 使用ttl方法来取代exist判断键值是否存在 2021-02-13 18:29:46 +08:00
winzer
5d96cd0f8c 修复教师直播页面推流按钮无反应
(cherry picked from commit 098595b98178528bed674197e3feeb59a52deb95)
2021-02-13 18:28:46 +08:00
winzer
685bef5050 course和chapter增加resource_count字段
(cherry picked from commit 840457e5afcdcaf8af804f3a2e2e9c245aba8579)
2021-02-13 18:28:30 +08:00
winzer
8eef6035a8 阶段性提交积分机制-0213 2021-02-13 18:21:42 +08:00
winzer
f47091991d 阶段性提交积分机制-0204 2021-02-04 15:39:53 +08:00
winzer
3d286baf91 更新价格验证 2021-02-03 15:52:19 +08:00
winzer
491c5d3688 增加原始价格,市场价改名为优惠价 2021-02-03 15:35:23 +08:00
koogua
ed9e5f1159 !65 修复教师直播页面推流按钮无反应
Merge pull request !65 from koogua/winzer/I2WADM
2021-01-29 15:18:37 +08:00
winzer
098595b981 修复教师直播页面推流按钮无反应 2021-01-29 15:17:12 +08:00
koogua
f518a6ec34 !64 course和chapter增加resource_count字段
Merge pull request !64 from 大漠孤烟直/winzer/I2NUJN
2021-01-26 17:20:30 +08:00
winzer
840457e5af course和chapter增加resource_count字段 2021-01-26 17:13:07 +08:00
jacky huang
87db0d0569
v.1.2.5 (#21)
* 1:更新ip2region,php-cron-scheduler包
2:替换phpqrcode
3:移除lcobucci/jwt

* 后台接入产品动态,相关链接指向官网

* 升级composer依赖包

* v1.2.5阶段新合并

Co-authored-by: winzer <winzer9527@163.com>
2021-01-21 17:47:40 +08:00
koogua
ecef7838f5 !63 v1.2.5阶段性合并
Merge pull request !63 from koogua/develop
2021-01-21 17:41:37 +08:00
winzer
e902c0c80f v1.2.5阶段新合并 2021-01-21 17:38:55 +08:00
koogua
4b88561604 !62 v1.2.5阶段性合并
Merge pull request !62 from koogua/develop
2021-01-19 18:55:57 +08:00
winzer
91410d60f8 升级composer依赖包 2021-01-19 18:53:27 +08:00
winzer
df3b317e44 后台接入产品动态,相关链接指向官网 2021-01-14 19:11:32 +08:00
winzer
d581c76232 1:更新ip2region,php-cron-scheduler包
2:替换phpqrcode
3:移除lcobucci/jwt
2021-01-14 19:11:29 +08:00
koogua
4d2f97ed33 !61 更新v1.2.4changelog
Merge pull request !61 from zhangshuren/develop
2021-01-10 14:10:53 +08:00
koogua
c817c80273 !60 回退 'Pull Request !59 : v1.2.4阶段性合并'
Merge pull request !60 from koogua/revert-merge-59-master
2021-01-10 14:07:49 +08:00
koogua
e18cf61005 回退 'Pull Request !59 : v1.2.4阶段性合并' 2021-01-10 14:07:09 +08:00
koogua
4ed859fad9 !59 v1.2.4阶段性合并
* !58 更新v1.2.4changelog
* !56 更新v1.2.4readme
* 更新v1.2.4readme
* !55 优化api请求判断
* 增加通过http头判断是否API请求
2021-01-10 14:02:49 +08:00
zhangshuren
cd2b22c7b8 !58 更新v1.2.4changelog
* 更新v1.2.4changelog
2021-01-10 14:00:19 +08:00
winzer
ff9f577372 !57 更新v1.2.4readme
* !56 更新v1.2.4readme
* 更新v1.2.4readme
* !55 优化api请求判断
* 增加通过http头判断是否API请求
2021-01-10 13:21:05 +08:00
winzer
99c9b8e462 !56 更新v1.2.4readme
Merge pull request !56 from winzer/winzer/readme-1.2.4
2021-01-10 13:17:02 +08:00
winzer
6d9218b8ee 更新v1.2.4readme 2021-01-10 13:08:22 +08:00
koogua
a9bf09fc3e !55 优化api请求判断
Merge pull request !55 from winzer/winzer/I2CN05
2021-01-10 11:50:41 +08:00
xiaochong0302
5feacf7a49 增加通过http头判断是否API请求 2021-01-10 11:46:08 +08:00
xiaochong0302
21de7f4ad7 Merge remote-tracking branch 'remotes/github/master'
# Conflicts:
#	CHANGELOG.md
#	README.md
#	app/Http/Admin/Services/AuthNode.php
#	app/Http/Admin/Views/setting/wechat_oa.volt
#	app/Library/AppInfo.php
#	composer.lock
#	db/migrations/schema.php
2021-01-09 18:51:30 +08:00
xiaochong0302
1012d0780e Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud 2021-01-09 18:44:28 +08:00
xiaochong0302
65b8650944 Merge branch 'develop' 2021-01-09 18:42:25 +08:00
koogua
1fd957a6e2 !54 v1.2.4阶段性合并
Merge pull request !54 from koogua/develop
2021-01-09 18:26:29 +08:00
xiaochong0302
d292e8cead v1.2.4优化 2021-01-09 17:30:48 +08:00
xiaochong0302
0902fa35a7 增加公众号自定义菜单 2021-01-07 15:10:43 +08:00
xiaochong0302
9db288c406 后台增加上传logo和favicon 2021-01-07 15:10:43 +08:00
xiaochong0302
b45cfa2279 优化task查询 2021-01-07 15:10:42 +08:00
xiaochong0302
fa1a713c60 优化findById参数类型导致的异常抛出 2021-01-07 15:10:42 +08:00
xiaochong0302
014941db55 课程页增加课程咨询按钮,过期直播课程隐藏购买按钮,优化咨询详情样式 2021-01-07 15:10:42 +08:00
jacky huang
a93ce8e293
v1.2.3 (#19)
* 去除无用的auth_url

* 修改readme

* 修复计划任务生成sitemap.xml失败问题

* 增加课程推荐

* 增加后台刷新首页缓存小工具

* 调整公众号模板消息

* 增加刷新首页推荐课程缓存逻辑

* 更新课程综合评分算法

* 修复在线用户并发重复记录问题

* 增加限制共享帐号功能

* 修复数据迁移中无符号整型问题

* 更新版本为v1.2.3
2021-01-03 15:13:40 +08:00
xiaochong0302
4b9bd42d91 Merge branch 'develop' 2021-01-03 14:40:55 +08:00
xiaochong0302
363241d265 更新版本为v1.2.3 2021-01-03 14:39:05 +08:00
xiaochong0302
c2487adc74 修复数据迁移中无符号整型问题 2021-01-03 13:26:55 +08:00
xiaochong0302
aef87543ff 增加限制共享帐号功能 2021-01-02 14:35:14 +08:00
xiaochong0302
5f6ee9af8d 修复在线用户并发重复记录问题 2020-12-31 12:29:58 +08:00
xiaochong0302
67c7a44a17 更新课程综合评分算法 2020-12-31 12:29:53 +08:00
jacky huang
c19eb63d5d
调整公众号模板消息 (#18) 2020-12-29 19:16:35 +08:00
xiaochong0302
cac3249fa0 增加刷新首页推荐课程缓存逻辑 2020-12-29 15:54:31 +08:00
xiaochong0302
fce9ab311a 调整公众号模板消息 2020-12-29 15:24:12 +08:00
koogua
cb4a2c75d9 !53 调整公众号模板消息
Merge pull request !53 from koogua/xiaochong0302/wechat-oa-fix
2020-12-29 15:22:35 +08:00
xiaochong0302
3b92468c06 调整公众号模板消息 2020-12-29 15:19:29 +08:00
xiaochong0302
9337c3824b 增加后台刷新首页缓存小工具 2020-12-28 13:04:49 +08:00
xiaochong0302
906e458ed0 增加课程推荐 2020-12-28 13:04:40 +08:00
xiaochong0302
d2cf6e7bac 修复计划任务生成sitemap.xml失败问题 2020-12-28 13:04:30 +08:00
xiaochong0302
fc1622e8c5 修改readme 2020-12-23 16:16:49 +08:00
xiaochong0302
27d90d372c 修改readme 2020-12-23 16:16:11 +08:00
xiaochong0302
cce1531337 去除无用的auth_url 2020-12-23 14:42:29 +08:00
xiaochong0302
b26e00bc18 去除无用的auth_url 2020-12-23 14:41:30 +08:00
xiaochong0302
45f1c17ea2 Merge remote-tracking branch 'gitee/master' 2020-12-23 12:14:52 +08:00
xiaochong0302
b6808d7294 Merge branch 'develop' 2020-12-23 12:13:10 +08:00
xiaochong0302
61218a22c3 增加v1.2.2发布说明 2020-12-23 11:45:07 +08:00
koogua
60cbfa671c !52 修复后台权限和低品质视频无法播放
Merge pull request !52 from koogua/xiaochong0302/I2A2OG
2020-12-21 20:18:56 +08:00
xiaochong0302
8af866ab64 修复后台权限和低品质视频无法播放 2020-12-21 20:16:34 +08:00
xiaochong0302
ae505a4815 修复后台权限和低品质视频无法播放 2020-12-21 20:15:33 +08:00
xiaochong0302
b090f3778e 第三方开放登录增加公众号通知 2020-12-21 16:06:44 +08:00
xiaochong0302
30fb586d0b 公众号互动通知 2020-12-20 17:28:13 +08:00
xiaochong0302
4a46a42cba 修复角色routes字段填充问题
(cherry picked from commit 99cfb9bc9ba31f4312d74b0b5ca2216b49c517c9)
2020-12-20 17:25:41 +08:00
koogua
0867063d9c !51 修复创建角色routes字段报错
Merge pull request !51 from koogua/xiaochong0302/I2A19T
2020-12-19 16:00:07 +08:00
xiaochong0302
99cfb9bc9b 修复角色routes字段填充问题 2020-12-19 15:38:57 +08:00
xiaochong0302
6f955bff84 修复没有生成MaxImGroupId的问题,增加课程默认群主的逻辑 2020-12-14 16:56:14 +08:00
koogua
2a387958c9 !50 修复未生成MaxImGroupId的问题
Merge pull request !50 from koogua/xiaochong0302/I299YG
2020-12-14 16:18:56 +08:00
xiaochong0302
b375f0d3f6 修复没有生成MaxImGroupId的问题,增加课程默认群主的逻辑 2020-12-14 16:16:25 +08:00
xiaochong0302
d60d748c28 公众号功能基本框架 2020-12-12 17:20:27 +08:00
xiaochong0302
e7780fcc23 Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud 2020-12-11 20:58:24 +08:00
xiaochong0302
3f058c3e45 摘除demo分支错误的合并 2020-12-11 20:53:54 +08:00
xiaochong0302
069145ed50 摘除demo分支错误的合并 2020-12-11 20:50:44 +08:00
xiaochong0302
e813df07ae Merge remote-tracking branch 'github/develop' into develop 2020-12-11 10:25:51 +08:00
jacky huang
4383a8b033
Develop (#17)
* !6 develop->master 1.1.0
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !7 纠正迁移文件和代码实际使用字段不一致
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !9 修正插入数据不一致以及后台菜单参数类型报错
* 1.修正插入的管理帐号数据
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !12 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !13 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !14 修正点击退款404
* 修复退款项目空白,以及弹窗高度自适应,取消退款内部错误

* 删除文件 LICENSE

* add LICENSE.

* update app/Http/Admin/Controllers/UploadController.php.
去除重复的signatureAction方法

* !19 v1.2.0阶段性合并
* 增加微信H5支付需要的Referer头信息

* 更新H5支付方式

* 更新H5支付方式

* 更新H5支付方式

* !23 修复添加课时后进入编辑页面500错误 
* 修复添加课时后进入编辑页面500错误

* !24 修复添加课时后进入编辑页面500错误
* 修复添加课时后进入编辑页面500错误

* !33 开放登录阶段性合并
* Merge remote-tracking branch 'gitee/xiaochong0302/I280IZ' into xiaocho…
* 初步完成开放登录,待线上测试7
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiao…
* 初步完成开放登录,待线上测试6
* !30 开放登录线上测试5
* !29 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* !28 开放登录线上测试4
* 初步完成开放登录,待线上测试4
* !27 开放登录线上测试3
* 初步完成开放登录,待线上测试3
* !26 开放登录线上测试2
* 初步完成开放登录,待线上测试2
* !25 开放登录线上测试
* 初步完成开放登录,待线上测试
* !22 验证更新h5支付
* Merge remote-tracking branch 'remotes/gitee/develop' into demo
* !20 验证更新h5支付
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* !16 v1.2.0阶段性合并
* 删除调试断点代码
* 删除重复的signature方法
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* demo后台增加统计
* !5 更新版本号1.1.0
* !4 v1.1.0版本develop->demo
* Merge branch 'develop' into demo
* 1.增加changelog.md
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* !1 精简优化代码
* Merge branch 'develop' into demo
* 合并修改

* !34 修复创建课时相关属性表数据未生成的问题 
* 修复创建课时相关属性表数据未生成的问题

* !35 修复腾讯云回调数据结构改变导致的错误
* 修复腾讯云回调数据结构改变导致的错误,缩短vod_event计划任务时间

* !36 修复添加课程后进入列表500错误
* 修复未填充教师和分类的列表错误

* 优化第三方登录,修复注册密码加密问题

* !38 修复课程分类未过滤
* 过滤课程分类

* !39 修复课程分类未过滤
* 过滤课程分类

* !40 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* !41 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* 优化开发登录,计划任务执行路径,周期

* !42 v1.2.1阶段性合并
* 计划任务执行路径,周期
* !39 修复课程分类未过滤
* 优化第三方登录,修复注册密码加密问题
* !33 开放登录阶段性合并
* !24 修复添加课时后进入编辑页面500错误

* 优化开发登录逻辑

* 更改QQ登录获取ACCESS_TOKEN的请求方式
2020-12-10 16:04:46 +08:00
jacky huang
d18f669146
Develop (#16)
* !6 develop->master 1.1.0
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !7 纠正迁移文件和代码实际使用字段不一致
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !9 修正插入数据不一致以及后台菜单参数类型报错
* 1.修正插入的管理帐号数据
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !12 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !13 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !14 修正点击退款404
* 修复退款项目空白,以及弹窗高度自适应,取消退款内部错误

* 删除文件 LICENSE

* add LICENSE.

* update app/Http/Admin/Controllers/UploadController.php.
去除重复的signatureAction方法

* !19 v1.2.0阶段性合并
* 增加微信H5支付需要的Referer头信息

* 更新H5支付方式

* 更新H5支付方式

* 更新H5支付方式

* !23 修复添加课时后进入编辑页面500错误 
* 修复添加课时后进入编辑页面500错误

* !24 修复添加课时后进入编辑页面500错误
* 修复添加课时后进入编辑页面500错误

* !33 开放登录阶段性合并
* Merge remote-tracking branch 'gitee/xiaochong0302/I280IZ' into xiaocho…
* 初步完成开放登录,待线上测试7
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiao…
* 初步完成开放登录,待线上测试6
* !30 开放登录线上测试5
* !29 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* !28 开放登录线上测试4
* 初步完成开放登录,待线上测试4
* !27 开放登录线上测试3
* 初步完成开放登录,待线上测试3
* !26 开放登录线上测试2
* 初步完成开放登录,待线上测试2
* !25 开放登录线上测试
* 初步完成开放登录,待线上测试
* !22 验证更新h5支付
* Merge remote-tracking branch 'remotes/gitee/develop' into demo
* !20 验证更新h5支付
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* !16 v1.2.0阶段性合并
* 删除调试断点代码
* 删除重复的signature方法
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* demo后台增加统计
* !5 更新版本号1.1.0
* !4 v1.1.0版本develop->demo
* Merge branch 'develop' into demo
* 1.增加changelog.md
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* !1 精简优化代码
* Merge branch 'develop' into demo
* 合并修改

* !34 修复创建课时相关属性表数据未生成的问题 
* 修复创建课时相关属性表数据未生成的问题

* !35 修复腾讯云回调数据结构改变导致的错误
* 修复腾讯云回调数据结构改变导致的错误,缩短vod_event计划任务时间

* !36 修复添加课程后进入列表500错误
* 修复未填充教师和分类的列表错误

* 优化第三方登录,修复注册密码加密问题

* !38 修复课程分类未过滤
* 过滤课程分类

* !39 修复课程分类未过滤
* 过滤课程分类

* !40 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* !41 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* 优化开发登录,计划任务执行路径,周期

* !42 v1.2.1阶段性合并
* 计划任务执行路径,周期
* !39 修复课程分类未过滤
* 优化第三方登录,修复注册密码加密问题
* !33 开放登录阶段性合并
* !24 修复添加课时后进入编辑页面500错误

* 优化开发登录逻辑

* 更改QQ登录获取ACCESS_TOKEN的请求方式
2020-12-10 16:02:56 +08:00
jacky huang
c68040d8b7
Merge branch 'master' into develop 2020-12-10 16:02:42 +08:00
koogua
3eb2216dac !47 v1.2.1阶段性合并
* Merge branch 'master' of gitee.com:koogua/course-tencent-cloud into develop
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into develop
* Merge remote-tracking branch 'github/develop' into develop
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* 更改QQ登录获取ACCESS_TOKEN的请求方式
* Merge branch 'master' into develop
* Merge branch 'master' of gitee.com:koogua/course-tencent-cloud into develop
* !44 v1.2.1阶段性合并
* 优化开发登录逻辑
* v1.2.1阶段性合并 (#13)
* !43 v1.2.0阶段性合并
* Merge branches 'develop' and 'master' of https://gitee.com/koogua/cour…
* 优化开发登录,计划任务执行路径,周期
* !41 修复课程分类未过滤2
* !39 修复课程分类未过滤
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud into demo
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud…
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* 优化第三方登录,修复注册密码加密问题
* !33 开放登录阶段性合并
* Merge branch 'xiaochong0302/I280IZ' of https://gitee.com/koogua/course…
* Merge remote-tracking branch 'gitee/xiaochong0302/I280IZ' into xiaocho…
* 初步完成开放登录,待线上测试7
* !31 开放登录线上测试6
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiao…
* 初步完成开放登录,待线上测试6
* !30 开放登录线上测试5
* !29 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* !28 开放登录线上测试4
* 初步完成开放登录,待线上测试4
* !27 开放登录线上测试3
* 初步完成开放登录,待线上测试3
* !26 开放登录线上测试2
* 初步完成开放登录,待线上测试2
* !25 开放登录线上测试
* 初步完成开放登录,待线上测试
* !24 修复添加课时后进入编辑页面500错误
* !22 验证更新h5支付
* 更新H5支付方式
* Merge remote-tracking branch 'remotes/gitee/develop' into demo
* 更新H5支付方式
* !20 验证更新h5支付
* 更新H5支付方式
* v1.2.0阶段性合并 (#11)
* Merge remote-tracking branch 'remotes/gitee/master' into develop
* Merge pull request #10 from xiaochong0302/develop
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* 增加微信H5支付需要的Referer头信息
* Merge pull request #8 from xiaochong0302/develop
* !16 v1.2.0阶段性合并
* 删除调试断点代码
* 删除重复的signature方法
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* demo后台增加统计
* Merge pull request #5 from xiaochong0302/develop
* Merge pull request #3 from xiaochong0302/develop
* !5 更新版本号1.1.0
* !4 v1.1.0版本develop->demo
* Merge branch 'develop' into demo
* 1.增加changelog.md
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* !1 精简优化代码
* Merge branch 'develop' into demo
* 合并修改
2020-12-10 15:52:34 +08:00
koogua
b0aede4a2e Merge branch 'master' of gitee.com:koogua/course-tencent-cloud into develop 2020-12-10 15:52:19 +08:00
koogua
c4da38c0b6 Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into develop 2020-12-10 15:51:00 +08:00
xiaochong0302
222f3a2b73 Merge remote-tracking branch 'github/develop' into develop 2020-12-10 15:44:08 +08:00
xiaochong0302
9affe895fc Merge branch 'develop' of https://gitee.com/koogua/course-tencent-cloud into develop 2020-12-10 15:41:42 +08:00
xiaochong0302
bee4daf672 更改QQ登录获取ACCESS_TOKEN的请求方式 2020-12-10 15:41:07 +08:00
jacky huang
eb3efb146f
Develop (#15)
* !6 develop->master 1.1.0
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !7 纠正迁移文件和代码实际使用字段不一致
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !9 修正插入数据不一致以及后台菜单参数类型报错
* 1.修正插入的管理帐号数据
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !12 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !13 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !14 修正点击退款404
* 修复退款项目空白,以及弹窗高度自适应,取消退款内部错误

* 删除文件 LICENSE

* add LICENSE.

* update app/Http/Admin/Controllers/UploadController.php.
去除重复的signatureAction方法

* !19 v1.2.0阶段性合并
* 增加微信H5支付需要的Referer头信息

* 更新H5支付方式

* 更新H5支付方式

* 更新H5支付方式

* !23 修复添加课时后进入编辑页面500错误 
* 修复添加课时后进入编辑页面500错误

* !24 修复添加课时后进入编辑页面500错误
* 修复添加课时后进入编辑页面500错误

* !33 开放登录阶段性合并
* Merge remote-tracking branch 'gitee/xiaochong0302/I280IZ' into xiaocho…
* 初步完成开放登录,待线上测试7
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiao…
* 初步完成开放登录,待线上测试6
* !30 开放登录线上测试5
* !29 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* !28 开放登录线上测试4
* 初步完成开放登录,待线上测试4
* !27 开放登录线上测试3
* 初步完成开放登录,待线上测试3
* !26 开放登录线上测试2
* 初步完成开放登录,待线上测试2
* !25 开放登录线上测试
* 初步完成开放登录,待线上测试
* !22 验证更新h5支付
* Merge remote-tracking branch 'remotes/gitee/develop' into demo
* !20 验证更新h5支付
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* !16 v1.2.0阶段性合并
* 删除调试断点代码
* 删除重复的signature方法
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* demo后台增加统计
* !5 更新版本号1.1.0
* !4 v1.1.0版本develop->demo
* Merge branch 'develop' into demo
* 1.增加changelog.md
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* !1 精简优化代码
* Merge branch 'develop' into demo
* 合并修改

* !34 修复创建课时相关属性表数据未生成的问题 
* 修复创建课时相关属性表数据未生成的问题

* !35 修复腾讯云回调数据结构改变导致的错误
* 修复腾讯云回调数据结构改变导致的错误,缩短vod_event计划任务时间

* !36 修复添加课程后进入列表500错误
* 修复未填充教师和分类的列表错误

* 优化第三方登录,修复注册密码加密问题

* !38 修复课程分类未过滤
* 过滤课程分类

* !39 修复课程分类未过滤
* 过滤课程分类

* !40 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* !41 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* 优化开发登录,计划任务执行路径,周期

* 优化开发登录逻辑
2020-12-09 19:40:25 +08:00
jacky huang
7058b13f78
Merge branch 'master' into develop 2020-12-09 19:39:14 +08:00
koogua
76b0d2b706 !45 v1.2.1阶段性合并
* Merge branch 'master' of gitee.com:koogua/course-tencent-cloud into develop
* 优化开发登录逻辑
* Merge branches 'develop' and 'master' of https://gitee.com/koogua/cour…
* 优化开发登录,计划任务执行路径,周期
* !41 修复课程分类未过滤2
* !39 修复课程分类未过滤
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud…
* 优化第三方登录,修复注册密码加密问题
* !33 开放登录阶段性合并
* !24 修复添加课时后进入编辑页面500错误
* 更新H5支付方式
* 更新H5支付方式
* 更新H5支付方式
* Merge remote-tracking branch 'remotes/gitee/master' into develop
* 增加微信H5支付需要的Referer头信息
2020-12-09 19:33:27 +08:00
koogua
55918c60ca Merge branch 'master' of gitee.com:koogua/course-tencent-cloud into develop 2020-12-09 19:33:12 +08:00
koogua
2927483017 !44 v1.2.1阶段性合并
* 优化开发登录逻辑
* Merge branches 'develop' and 'master' of https://gitee.com/koogua/cour…
* 优化开发登录,计划任务执行路径,周期
* !41 修复课程分类未过滤2
* !40 修复课程分类未过滤2
* !39 修复课程分类未过滤
* !38 修复课程分类未过滤
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud…
* !36 修复添加课程后进入列表500错误
* !35 修复腾讯云回调数据结构改变导致的错误
* !34 修复创建课时相关属性表数据未生成的问题 
* !23 修复添加课时后进入编辑页面500错误
2020-12-09 19:31:42 +08:00
xiaochong0302
6455f88181 优化开发登录逻辑 2020-12-09 19:29:34 +08:00
jacky huang
3cca7661cb
v1.2.1阶段性合并 (#13)
* !6 develop->master 1.1.0
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !7 纠正迁移文件和代码实际使用字段不一致
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !9 修正插入数据不一致以及后台菜单参数类型报错
* 1.修正插入的管理帐号数据
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !12 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !13 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !14 修正点击退款404
* 修复退款项目空白,以及弹窗高度自适应,取消退款内部错误

* 删除文件 LICENSE

* add LICENSE.

* update app/Http/Admin/Controllers/UploadController.php.
去除重复的signatureAction方法

* !19 v1.2.0阶段性合并
* 增加微信H5支付需要的Referer头信息

* 更新H5支付方式

* 更新H5支付方式

* 更新H5支付方式

* !23 修复添加课时后进入编辑页面500错误 
* 修复添加课时后进入编辑页面500错误

* !24 修复添加课时后进入编辑页面500错误
* 修复添加课时后进入编辑页面500错误

* !33 开放登录阶段性合并
* Merge remote-tracking branch 'gitee/xiaochong0302/I280IZ' into xiaocho…
* 初步完成开放登录,待线上测试7
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiao…
* 初步完成开放登录,待线上测试6
* !30 开放登录线上测试5
* !29 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* !28 开放登录线上测试4
* 初步完成开放登录,待线上测试4
* !27 开放登录线上测试3
* 初步完成开放登录,待线上测试3
* !26 开放登录线上测试2
* 初步完成开放登录,待线上测试2
* !25 开放登录线上测试
* 初步完成开放登录,待线上测试
* !22 验证更新h5支付
* Merge remote-tracking branch 'remotes/gitee/develop' into demo
* !20 验证更新h5支付
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* !16 v1.2.0阶段性合并
* 删除调试断点代码
* 删除重复的signature方法
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* demo后台增加统计
* !5 更新版本号1.1.0
* !4 v1.1.0版本develop->demo
* Merge branch 'develop' into demo
* 1.增加changelog.md
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* !1 精简优化代码
* Merge branch 'develop' into demo
* 合并修改

* !34 修复创建课时相关属性表数据未生成的问题 
* 修复创建课时相关属性表数据未生成的问题

* !35 修复腾讯云回调数据结构改变导致的错误
* 修复腾讯云回调数据结构改变导致的错误,缩短vod_event计划任务时间

* !36 修复添加课程后进入列表500错误
* 修复未填充教师和分类的列表错误

* 优化第三方登录,修复注册密码加密问题

* !38 修复课程分类未过滤
* 过滤课程分类

* !39 修复课程分类未过滤
* 过滤课程分类

* !40 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* !41 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类

* 优化开发登录,计划任务执行路径,周期
2020-12-09 18:07:24 +08:00
koogua
edf1074bec !43 v1.2.0阶段性合并
* Merge branches 'develop' and 'master' of https://gitee.com/koogua/cour…
* 优化开发登录,计划任务执行路径,周期
* !41 修复课程分类未过滤2
* !40 修复课程分类未过滤2
* !39 修复课程分类未过滤
* !38 修复课程分类未过滤
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud…
* !36 修复添加课程后进入列表500错误
* !35 修复腾讯云回调数据结构改变导致的错误
* !34 修复创建课时相关属性表数据未生成的问题 
* !23 修复添加课时后进入编辑页面500错误
2020-12-09 18:04:25 +08:00
koogua
78bbfd3577 !42 v1.2.1阶段性合并
* 计划任务执行路径,周期
* !39 修复课程分类未过滤
* 优化第三方登录,修复注册密码加密问题
* !33 开放登录阶段性合并
* !24 修复添加课时后进入编辑页面500错误
2020-12-09 18:02:39 +08:00
xiaochong0302
86c9c03835 Merge branches 'develop' and 'master' of https://gitee.com/koogua/course-tencent-cloud into develop 2020-12-09 17:58:33 +08:00
xiaochong0302
addafb0b44 优化开发登录,计划任务执行路径,周期 2020-12-09 17:56:53 +08:00
koogua
9d8c147d38 !41 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类
2020-12-09 17:50:08 +08:00
koogua
70682f1ebb !40 修复课程分类未过滤2
* 过滤课程分类
* 过滤课程分类
2020-12-09 16:01:04 +08:00
koogua
3854e1d458 !39 修复课程分类未过滤
* 过滤课程分类
2020-12-09 15:31:42 +08:00
koogua
e35c55a03f !38 修复课程分类未过滤
* 过滤课程分类
2020-12-09 15:25:55 +08:00
xiaochong0302
16c1815900 Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud into demo 2020-12-08 17:23:58 +08:00
xiaochong0302
435653cee2 Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud into develop 2020-12-08 17:22:44 +08:00
xiaochong0302
83580d330d Merge branch 'develop' of https://gitee.com/koogua/course-tencent-cloud into demo
# Conflicts:
#	app/Http/Admin/Views/templates/main.volt
#	app/Http/Home/Controllers/ConnectController.php
#	app/Http/Home/Services/Connect.php
#	app/Services/OAuth/QQ.php
#	app/Services/OAuth/WeiBo.php
#	app/Services/OAuth/WeiXin.php
2020-12-08 17:17:13 +08:00
xiaochong0302
841593b5a7 优化第三方登录,修复注册密码加密问题 2020-12-08 17:10:07 +08:00
koogua
6b56711fe9 !36 修复添加课程后进入列表500错误
* 修复未填充教师和分类的列表错误
2020-12-08 12:44:19 +08:00
koogua
3b99ddae26 !35 修复腾讯云回调数据结构改变导致的错误
* 修复腾讯云回调数据结构改变导致的错误,缩短vod_event计划任务时间
2020-12-07 21:06:33 +08:00
koogua
edc6edbfda !34 修复创建课时相关属性表数据未生成的问题
* 修复创建课时相关属性表数据未生成的问题
2020-12-07 13:37:50 +08:00
koogua
dd99631f6e !33 开放登录阶段性合并
* Merge remote-tracking branch 'gitee/xiaochong0302/I280IZ' into xiaocho…
* 初步完成开放登录,待线上测试7
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiao…
* 初步完成开放登录,待线上测试6
* !30 开放登录线上测试5
* !29 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* !28 开放登录线上测试4
* 初步完成开放登录,待线上测试4
* !27 开放登录线上测试3
* 初步完成开放登录,待线上测试3
* !26 开放登录线上测试2
* 初步完成开放登录,待线上测试2
* !25 开放登录线上测试
* 初步完成开放登录,待线上测试
* !22 验证更新h5支付
* Merge remote-tracking branch 'remotes/gitee/develop' into demo
* !20 验证更新h5支付
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* !16 v1.2.0阶段性合并
* 删除调试断点代码
* 删除重复的signature方法
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-clou…
* demo后台增加统计
* !5 更新版本号1.1.0
* !4 v1.1.0版本develop->demo
* Merge branch 'develop' into demo
* 1.增加changelog.md
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* Merge branch 'develop' into demo
* !1 精简优化代码
* Merge branch 'develop' into demo
* 合并修改
2020-12-07 11:02:13 +08:00
xiaochong0302
873b92d7e1 Merge branch 'xiaochong0302/I280IZ' of https://gitee.com/koogua/course-tencent-cloud into demo
# Conflicts:
#	app/Services/OAuth/WeiXin.php
2020-12-07 10:43:58 +08:00
xiaochong0302
fc6e9382a0 Merge remote-tracking branch 'gitee/xiaochong0302/I280IZ' into xiaochong0302/I280IZ 2020-12-07 10:40:20 +08:00
xiaochong0302
bf84732375 初步完成开放登录,待线上测试7 2020-12-07 10:39:51 +08:00
koogua
a4a9936054 !31 开放登录线上测试6
* Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiao…
* 初步完成开放登录,待线上测试6
* 初步完成开放登录,待线上测试5
* 初步完成开放登录,待线上测试4
* 初步完成开放登录,待线上测试3
* 初步完成开放登录,待线上测试2
2020-12-05 21:53:12 +08:00
koogua
5c48ed3a4c Merge branch 'demo' of gitee.com:koogua/course-tencent-cloud into xiaochong0302/I280IZ 2020-12-05 21:52:58 +08:00
xiaochong0302
4fa02f34bb 初步完成开放登录,待线上测试6 2020-12-05 21:49:45 +08:00
koogua
7399fcbb93 !30 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* 初步完成开放登录,待线上测试4
* 初步完成开放登录,待线上测试3
* 初步完成开放登录,待线上测试2
2020-12-05 21:42:21 +08:00
koogua
013f213bfa !29 开放登录线上测试5
* 初步完成开放登录,待线上测试5
* 初步完成开放登录,待线上测试4
* 初步完成开放登录,待线上测试3
* 初步完成开放登录,待线上测试2
2020-12-05 21:36:11 +08:00
xiaochong0302
e232160d22 初步完成开放登录,待线上测试5 2020-12-05 21:34:56 +08:00
koogua
2e61830665 !28 开放登录线上测试4
* 初步完成开放登录,待线上测试4
* 初步完成开放登录,待线上测试3
* 初步完成开放登录,待线上测试2
2020-12-05 21:31:25 +08:00
xiaochong0302
5cf4bdfff0 初步完成开放登录,待线上测试4 2020-12-05 21:29:58 +08:00
koogua
6b42b3252c !27 开放登录线上测试3
* 初步完成开放登录,待线上测试3
* 初步完成开放登录,待线上测试2
2020-12-05 21:02:37 +08:00
xiaochong0302
3d115e78e7 初步完成开放登录,待线上测试3 2020-12-05 21:00:05 +08:00
koogua
ea7d4d648d !26 开放登录线上测试2
* 初步完成开放登录,待线上测试2
2020-12-05 19:52:26 +08:00
xiaochong0302
b0d467c619 初步完成开放登录,待线上测试2 2020-12-05 19:50:17 +08:00
koogua
a5fcbc92d8 !25 开放登录线上测试
Merge pull request !25 from koogua/xiaochong0302/I280IZ
2020-12-05 18:15:09 +08:00
xiaochong0302
eac442c0a0 初步完成开放登录,待线上测试 2020-12-05 18:12:11 +08:00
koogua
753f2203fa !24 修复添加课时后进入编辑页面500错误
* 修复添加课时后进入编辑页面500错误
2020-12-03 14:41:15 +08:00
koogua
029de410a8 !23 修复添加课时后进入编辑页面500错误
* 修复添加课时后进入编辑页面500错误
2020-12-03 14:37:37 +08:00
koogua
f8e9299b51 !22 验证更新h5支付
Merge pull request !22 from koogua/develop
2020-12-02 21:24:19 +08:00
xiaochong0302
385016613b 更新H5支付方式 2020-12-02 21:23:04 +08:00
xiaochong0302
167dab9f3f Merge remote-tracking branch 'remotes/gitee/develop' into demo
# Conflicts:
#	app/Http/Api/Services/Trade.php
#	app/Http/Home/Controllers/PublicController.php
2020-12-02 15:19:23 +08:00
xiaochong0302
079cf5cec3 更新H5支付方式 2020-12-02 15:09:50 +08:00
koogua
7636a8af1c !20 验证更新h5支付
* 更新H5支付方式
* Merge remote-tracking branch 'remotes/gitee/master' into develop
* !19 v1.2.0阶段性合并
* update app/Http/Admin/Controllers/UploadController.php.
* Merge branch 'develop' of https://gitee.com/koogua/course-tencent-cloud
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud
* add LICENSE.
* 删除文件 LICENSE
* !14 修正点击退款404
* !13 修正退款项目空白以及弹窗自适应
* !12 修正退款项目空白以及弹窗自适应
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud
* !9 修正插入数据不一致以及后台菜单参数类型报错
* !7 纠正迁移文件和代码实际使用字段不一致
* Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud
* !6 develop->master 1.1.0
2020-12-02 11:01:00 +08:00
xiaochong0302
698b6028c2 更新H5支付方式 2020-12-02 10:58:09 +08:00
jacky huang
a7fed533d1
v1.2.0阶段性合并 (#11)
* !6 develop->master 1.1.0
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !7 纠正迁移文件和代码实际使用字段不一致
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !9 修正插入数据不一致以及后台菜单参数类型报错
* 1.修正插入的管理帐号数据
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6

* !12 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !13 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应

* !14 修正点击退款404
* 修复退款项目空白,以及弹窗高度自适应,取消退款内部错误

* 删除文件 LICENSE

* add LICENSE.

* update app/Http/Admin/Controllers/UploadController.php.
去除重复的signatureAction方法

* !19 v1.2.0阶段性合并
* 增加微信H5支付需要的Referer头信息
2020-12-01 10:12:09 +08:00
xiaochong0302
0217ae162d Merge remote-tracking branch 'remotes/gitee/master' into develop 2020-12-01 10:03:37 +08:00
koogua
ba6894fcd0 !19 v1.2.0阶段性合并
* 增加微信H5支付需要的Referer头信息
2020-12-01 09:58:10 +08:00
jacky huang
af5fcc78c3
Merge pull request #10 from xiaochong0302/develop
v1.2.0阶段性合并
2020-11-30 12:30:26 +08:00
xiaochong0302
7ceee5d26e Merge branch 'develop' of https://gitee.com/koogua/course-tencent-cloud into demo
# Conflicts:
#	app/Http/Api/Controllers/ChapterController.php
2020-11-28 17:47:14 +08:00
xiaochong0302
bddb37ae7f 增加微信H5支付需要的Referer头信息 2020-11-28 17:31:45 +08:00
koogua
c22c2690d6 update app/Http/Admin/Controllers/UploadController.php.
去除重复的signatureAction方法
2020-11-27 10:29:20 +08:00
jacky huang
ec938d0a5f
Merge pull request #8 from xiaochong0302/develop
v1.2.0阶段性合并
2020-11-27 09:53:00 +08:00
xiaochong0302
befaccd085 Merge branch 'develop' of https://gitee.com/koogua/course-tencent-cloud
# Conflicts:
#	CHANGELOG.md
#	LICENSE
#	app/Http/Home/Controllers/ChapterController.php
#	app/Http/Home/Controllers/PublicController.php
#	app/Library/AppInfo.php
#	app/Models/Client.php
#	app/Services/Logic/Chapter/BasicInfo.php
2020-11-27 09:47:09 +08:00
xiaochong0302
9536ff75ca Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud 2020-11-27 09:41:31 +08:00
koogua
4cae5ece11 !16 v1.2.0阶段性合并
* 更换README.md中的简书图床为gitee本地
* 修复编辑器图片上传,增加上传文件身份认证,markdown内容解析
* 移除Mobile模块,修复API请求章节信息权限问题
2020-11-27 09:38:54 +08:00
xiaochong0302
a6a6475f85 更换README.md中的简书图床为gitee本地 2020-11-27 09:34:56 +08:00
xiaochong0302
f980964ba8 修复编辑器图片上传,增加上传文件身份认证,markdown内容解析 2020-11-26 21:45:52 +08:00
koogua
ec21a4e6a2 add LICENSE. 2020-11-26 14:29:51 +08:00
koogua
4596011678 删除文件 LICENSE 2020-11-26 14:29:29 +08:00
xiaochong0302
b716dcfa28 Merge remote-tracking branch 'github/develop' into develop 2020-11-24 21:00:50 +08:00
xiaochong0302
c2abc741ed 移除Mobile模块,修复API请求章节信息权限问题 2020-11-24 21:00:29 +08:00
xiaochong0302
c8b96ec4ac 移除Mobile模块,修复API请求章节信息权限问题 2020-11-24 20:47:05 +08:00
xiaochong0302
a2a8e5c810 删除调试断点代码 2020-11-23 21:55:58 +08:00
xiaochong0302
e03dcb89fa 删除重复的signature方法 2020-11-23 21:50:37 +08:00
xiaochong0302
6fa30310dd Merge branch 'develop' of https://gitee.com/koogua/course-tencent-cloud into demo
# Conflicts:
#	CHANGELOG.md
#	app/Http/Home/Controllers/ChapterController.php
#	app/Library/AppInfo.php
#	app/Services/Logic/Chapter/BasicInfo.php
2020-11-23 21:28:30 +08:00
xiaochong0302
9e3cd93599 Merge remote-tracking branch 'github/develop' into develop 2020-11-23 21:16:03 +08:00
xiaochong0302
ac352683dd 删除api验证,app应用管理 2020-11-23 21:10:41 +08:00
xiaochong0302
27b3dc1935 删除api验证,app应用管理 2020-11-23 21:05:14 +08:00
xiaochong0302
70886569d1 优化代码 2020-11-19 21:26:01 +08:00
xiaochong0302
10c43d0ab3 调整直播部分结构 2020-11-15 18:26:35 +08:00
xiaochong0302
a59ab3c6d8 优化点播直播部分代码 2020-11-12 20:50:01 +08:00
xiaochong0302
3ce6897de1 优化点播直播部分代码 2020-11-11 20:39:49 +08:00
xiaochong0302
f4dda5a58c 修复退款项目空白,以及弹窗高度自适应,取消退款内部错误 2020-11-10 16:21:11 +08:00
koogua
09a131c6fe !14 修正点击退款404
* 修复退款项目空白,以及弹窗高度自适应,取消退款内部错误
2020-11-10 16:19:54 +08:00
xiaochong0302
7453a1448a 修复退款项目空白,以及弹窗高度自适应 2020-11-10 15:01:56 +08:00
koogua
8dd496ab2a !13 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应
2020-11-10 14:58:59 +08:00
xiaochong0302
5877874d64 修复退款项目空白,以及弹窗高度自适应 2020-11-10 14:44:48 +08:00
koogua
7c92b0315a !12 修正退款项目空白以及弹窗自适应
* 修复退款项目空白,以及弹窗高度自适应
2020-11-10 14:36:41 +08:00
xiaochong0302
6ca3e99599 Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud 2020-11-10 10:51:01 +08:00
koogua
cbc2e5762a !11 阶段性合并
* 根据app需要作出相应调整
* 路由增加命名name,增加app应用管理
* 完成基本API,增加h5和小程序支付定义
2020-11-10 10:25:16 +08:00
koogua
823e47f6b2 !10 命令行工具rebuild_index_course_cache增加type=simple逻辑
Merge pull request !10 from koogua/koogua/I1Y8EB
2020-10-30 19:13:14 +08:00
koogua
f318fccada !9 修正插入数据不一致以及后台菜单参数类型报错
* 1.修正插入的管理帐号数据
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6
2020-10-26 20:09:31 +08:00
koogua
d6a43e816b !8 修正插入数据不一致以及后台菜单参数类型报错
Merge pull request !8 from koogua/koogua/I22LSW
2020-10-26 20:06:01 +08:00
xiaochong0302
ee20552eeb 1.修正插入的管理帐号数据
2.修正参数类型报错
2020-10-26 19:59:46 +08:00
xiaochong0302
cdc174acdc 增加index_tpl_type=simple时重建缓存的支持 2020-10-14 09:57:45 +08:00
xiaochong0302
de2a71415e demo后台增加统计 2020-10-13 17:58:11 +08:00
jacky huang
2da5f09644
Merge pull request #5 from xiaochong0302/develop
纠正迁移文件和时间代码中字段不一致
2020-10-13 11:46:07 +08:00
koogua
0f6345e5da !7 纠正迁移文件和代码实际使用字段不一致
* 纠正迁移文件和时间代码中字段不一致
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6
2020-10-13 10:24:40 +08:00
xiaochong0302
034a6803f0 Merge branch 'master' of https://gitee.com/koogua/course-tencent-cloud 2020-10-13 10:16:45 +08:00
xiaochong0302
87f6744827 纠正迁移文件和时间代码中字段不一致 2020-10-13 10:12:57 +08:00
jacky huang
7f2895b2be
Merge pull request #3 from xiaochong0302/develop
Develop
2020-10-09 11:13:40 +08:00
koogua
a7f197c01b !6 develop->master 1.1.0
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
* Merge branch 'master' into develop
* Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud
* 1.增加changelog.md
* 1.简化部分路由地址
* Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/h…
* Bump symfony/http-foundation from 4.3.4 to 5.1.6
2020-10-08 18:44:06 +08:00
koogua
cff2d5564e !5 更新版本号1.1.0
* 更新版本号
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
2020-10-08 18:41:07 +08:00
xiaochong0302
ffebcfa1fe 更新版本号 2020-10-08 18:38:18 +08:00
koogua
2f119c65e8 !4 v1.1.0版本develop->demo
* 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式
* Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencen…
* 前台学习资料部分完成
* !2 后台运营统计合并
* 后台学习资料部分完成
2020-10-08 17:20:43 +08:00
xiaochong0302
5784be5067 完善后台今日统计,增加权限白名单,增加后台首页菜单,调整后台登录页样式 2020-10-08 17:17:10 +08:00
xiaochong0302
cc1c663917 Merge branch 'koogua/I1XFCF' of https://gitee.com/koogua/course-tencent-cloud into develop
 Conflicts:
	db/migrations/schema.php
2020-10-08 16:09:13 +08:00
xiaochong0302
6b8baae6b3 前台学习资料部分完成 2020-10-08 15:33:39 +08:00
koogua
6cd3fb6d6c !2 后台运营统计合并
* 修复hash中前一日统计没有更新的问题
* 增加后台运营统计
2020-10-08 10:07:49 +08:00
xiaochong0302
ebb2c36f9f 后台学习资料部分完成 2020-10-07 18:45:50 +08:00
xiaochong0302
673eba24e1 Merge branch 'develop' into demo 2020-09-30 17:46:57 +08:00
xiaochong0302
b987ddf083 Merge branch 'master' into develop 2020-09-30 17:45:31 +08:00
xiaochong0302
4e98c3abeb Merge branch 'master' of https://github.com/xiaochong0302/course-tencent-cloud 2020-09-30 17:41:20 +08:00
xiaochong0302
88684c4d71 1.增加changelog.md
2.修复后台学习记录客户端枚举值
2020-09-30 17:32:22 +08:00
xiaochong0302
ab5b416ec9 1.增加changelog.md
2.修复后台学习记录客户端枚举值
2020-09-30 17:31:34 +08:00
xiaochong0302
8cc06f6430 Merge branch 'develop' into demo 2020-09-29 18:36:21 +08:00
xiaochong0302
0a1c64d2b6 1.简化部分路由地址
2.优化账户安全以及登录页面
2020-09-29 18:34:47 +08:00
jacky huang
a6505c45a7
Merge pull request #2 from xiaochong0302/dependabot/composer/symfony/http-foundation-5.1.6
Bump symfony/http-foundation from 4.3.4 to 5.1.6
2020-09-29 09:45:11 +08:00
dependabot[bot]
fea36d591e
Bump symfony/http-foundation from 4.3.4 to 5.1.6
Bumps [symfony/http-foundation](https://github.com/symfony/http-foundation) from 4.3.4 to 5.1.6.
- [Release notes](https://github.com/symfony/http-foundation/releases)
- [Changelog](https://github.com/symfony/http-foundation/blob/master/CHANGELOG.md)
- [Commits](https://github.com/symfony/http-foundation/compare/v4.3.4...v5.1.6)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-28 03:41:38 +00:00
koogua
efc8bb317e add LICENSE. 2020-09-27 18:14:57 +08:00
xiaochong0302
cf239e70a0 Merge branch 'develop' into demo 2020-09-27 17:59:13 +08:00
xiaochong0302
ca7d63f0fa Merge branch 'develop' into demo 2020-09-26 19:48:45 +08:00
koogua
6679214808 !1 精简优化代码
* 优化代码
* 重新提交LICENSE
* 测试前台支付,增加若干命令行快捷方法
* 删除文件 LICENSE
2020-09-26 18:59:02 +08:00
xiaochong0302
46d1c35d21 Merge branch 'develop' into demo 2020-09-24 20:07:27 +08:00
xiaochong0302
032a730961 合并修改 2020-09-22 20:03:39 +08:00
1853 changed files with 96948 additions and 67341 deletions

8
.gitignore vendored
View File

@ -1,11 +1,15 @@
/.git
/.idea
/vendor
/config/config.php
/config/xs.course.ini
/config/xs.group.ini
/config/xs.user.ini
/config/xs.article.ini
/config/xs.question.ini
/config/alipay/*.crt
/config/wxpay/*.pem
/db/migrations/schema.php
/public/robots.txt
/public/sitemap.xml
/public/h5
/storage/cache/purifier
*KgTest*

861
CHANGELOG.md Normal file
View File

@ -0,0 +1,861 @@
### [v1.7.8](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.8)(2025-06-20)
- 移除ThrottleLimit
- 增加CloseLiveTask
- 增加搜索页图片alt属性striptags过滤
- 后台增加返回顶部快捷方式
- 前台fixbar增加联系电话
- 优化安装脚本
- 优化课时列表直播提示
- 优化后台返回链接
- 优化统计分析代码位置
- 直播回调后更新课时缓存
- 后台清空头像->上传头像
- sitemap.xml直接写入网站根目录
### [v1.7.7](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.7)(2025-04-20)
- 优化索引管理工具
- 优化章节等页面UI
- 修正workerman中onMessage问题
- 修正非免费课程试听问题
- 优化layer窗口中的表单跳转
- 文件清理以及命名优化
- 优化倒计时
### [v1.7.6](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.6)(2025-03-22)
- 升级layui-v2.9.25
- 去除发货中不必要的异常抛出
- 去除文章和问题缓存重建
- 去除多余的文件引用
- 修正每日访问站点积分问题
- 限制全文搜索关键字长度
- 统一规划二维码样式
### [v1.7.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.5)(2025-02-22)
- 优化后台统计图表
- 优化图片放大查看
- 优化错误处理机制
- 优化前台编辑器页面
- 去除一些过度的设计
- 精简属性空判断
- 规整redirect
- 优化bootstrap
- 优化logger
- 优化contact
- 优化logo
- 优化nav
### [v1.7.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.4)(2024-12-10)
- 更新layui-v2.9.20
- 优化编辑器内容自动提交
- 修正课时详情页目录高亮问题
- 修正CommentInfo中点赞判断
- 精简AccountSearchTrait
- 优化kg_h5_index_url()
- 优化CourseUserTrait
- 优化kg_setting()
- 优化CsrfToken
### [v1.7.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.3)(2024-10-10)
- 更新layui-v2.9.16
- 增加编辑器内容自动提交
- 修改文章和提问可用tag数量
- 优化findUserActiveSessions
- 优化findUserActiveTokens
- 优化上传文件失败抛出异常
- 优化默认文件上传
- 优化用户锁定相关
### [v1.7.2](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.2)(2024-07-31)
- 更新layui-v2.9.14
- 优化docker自动化脚本
- 修正教师直播通知
- 修正课程分类删选问题
- 后台增加客户服务入口
- redis增加expire方法
- 日志记录增加log.trace参数
- 精简代码
### [v1.7.1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.1)(2024-06-31)
- 更新layui-v2.9.10
- 更新docker国内镜像地址
- 增加导入镜像构建容器的方式
- 调整微信公众号模板消息
- 移除加载富文本编辑器初始化的语言文件
- 移除consult中多余的chapter_id属性
- 修正课程列表顶部过滤条件区块不能收缩问题
- 用户中心第三方登录列表增加过滤条件
- 后台增加打开/关闭左侧菜单提示
- 优化整理文件mimeType
- iconfont资源本地化
- 优化UploadController
- 优化富文本内容显示样式
- 简化内容图片放大监听
- 去除课程打赏相关内容
- 课程增加能否发布检查
### [v1.7.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.7.0)(2024-05-15)
- 升级layui-2.9.8
- 调整html编辑器属性
- 增加代码块内容复制
- 清理无用的Captcha配置
- 联系人QQ改为上传二维码图片
- 修正logo,favicon上传路径
- 登录后台同时登录前台
- 移动端修正评论发表
### [v1.6.9](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.9)(2024-04-15)
- 增加用户删除和还原功能
- 增加unauthorized响应
- 增加post方式传递csrf_token
- 删除chapter中resource_count,consult_count属性
- 精简csrf_token白名单
- 拆解优化migrations创建表脚本
- 修正chapter_user时长重复计数问题
- 修正后台刷新首页缓存问题
- 修正home模块中编辑器图片上传
- 优化文章和提问搜索条件
- 优化课程详情页排版
- 优化storage上传
- 优化CategoryTreeList
- 优化CourseUserTrait
- 更新layui-v2.9.7
### [v1.6.8](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.8)(2024-01-30)
- 修正course_user中active_time未更新问题
- 修正主页simple模式免费课程模块样式问题
- 修正chapter_user中plan_id=0问题
- 修正课时评论管理链接
- 修正用户active_time搜索条件
- 修正课时发布switch开关
- 精简chapter/lessons.volt
- 去除league/commonmark包
- 去除分类等必选判断
- 更新layui-v2.9.3
- 使用ServiceTrait精简代码
- 优化AccountTrait
- 优化错误处理
### [v1.6.7](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.7)(2023-12-15)
- 增加文章分类功能
- 增加问题分类功能
- 增加审核等批量功能
- 增加若干业务插件埋点
- 精简重构大量业务逻辑
- 移除秒杀营销功能
- 已发现的问题修复
### [v1.6.6](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.6)(2023-08-30)
- 还原意外删除的AnswerList.php文件
- 修正邮箱注册提交按钮不可用问题
- 去除删除远程课件逻辑
- 增加课程课件资料总览
- 优化cleanDemoDataTask脚本
- 优化tag表migration脚本
- 命名结构等常规优化
### [v1.6.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.5)(2023-07-15)
- 升级layui-v2.8.8
- 使用本地图像验证码
- 优化计划任务脚本
- 优化日志清理脚本
- 优化钉钉webhook
- 修正图文分享参数问题
### [v1.6.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.4)(2023-06-15)
- 增加推荐课程等Widget
- 更新Composer包
- 修正验证空口令问题
- 优化订单确认页样式
- 优化课程等Me相关信息
- 优化分享URL
- 优化用户课程查找
- 优化通知相关
- 优化Providers
- 优化课程章节权限
- 优化钉钉机器人
### [v1.6.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.3)(2023-05-08)
- 强化文章|提问|课程列表参数检查
- 优化HtmlPurifier内容过滤
- 优化排序条件和分页重复问题
- 优化课程搜索分组条件样式
- 优化课程学习时长同步
- 优化程序语法层面
- 更新Layui-v2.8.2
- 替换ip2region包
- 去除未支付“新鲜”订单检查
- 修正手续费率设置为0无效问题
### [v1.6.2](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.2)(2023-02-12)
- 增加ServerMonitor监控指标配置
- 同步更新腾讯云短信内容规则
- 文章和问答增加评论开关属性
- 修正视频记忆播放无效问题
- 升级composer包版本
- 优化Repo查询默认排序
- 优化管理后台细节
- 优化二维码输出
- 优化评分检查
### [v1.6.1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.1)(2022-12-12)
- 富文本编辑器增加粘贴图片和远程图片本地化
- 修正用户通知标记为已读,计数不归零问题
- 修正播放器中央按钮显示问题
- 优化腾讯云播放地址鉴权参数
- 优化热门作者,答主和问题
- 优化学员学习记录显示
- 优化表单数据提交体验
- 优化单章节层级显示
- 优化ServerInfo类
### [v1.6.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.0)(2022-10-26)
- 播放器中间增加大号播放按钮
- 单页和帮助增加浏览计数属性
- logo上增加首页链接
- 修正分类默认图标问题
- 修正layui-main样式更新带来的问题
- 更新composer包
- 调整退款手续费范围
- 导航部分,教师->师资
- 优化分页组件参数
- 优化内容表格样式
- 优化热门问题和热门答主
- 优化通知计数方式
### [v1.5.9](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.9)(2022-09-20)
- 修正内容图片上传问题
- 去除user全文索引
- 调整notice目录结构
- 更新默认图片
- 更新直播名格式化
- 更新微博分享链接
- 文章单页等增加SEO关键字
- 专题增加封面上传
- 优化router扫描规则
- 升级layui至v2.7.6
- 增加用户协议和隐私政策
- 优化错误日志
### [v1.5.8](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.8)(2022-08-28)
- 整理migrations
- 更新自动安装脚本
- 优化登录/注册/忘记密码页
- 修复移动端首页课程缓存刷新
- sitemap条目增加过滤条件
### [v1.5.7](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.7)(2022-08-18)
- 清理群组残留
- 升级腾讯云存储SDK到v2.5.6
- GuzzleHttp升级到v6.5.7
- 优化HtmlPurifier缓存目录自动创建
- 优化问题回答排序问题
- 优化腾讯云短信错误日志
- 整理查询构建语句
- 整理优化CSS
### [v1.5.6](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.6)(2022-08-08)
- 增加应用内命令行migrations
- 移除群组和微聊模块
- kindeditor替换vditor
- markdown转html
### [v1.5.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.5)(2022-07-27)
- 修正获分类查询条件
- 修正锁定账户还能登录的问题
- 发货增加noMatchedHandler
- 增加demo数据清理脚本
- 用户课程列表增加角色限定条件
- 精简模块加载和路由扫描
- 优化CsrfToken
- 去除无实质作用的数据表优化
### [v1.5.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.4)(2022-06-15)
- 增加migration助手SettingTrait
- 增加积分兑换会员
- 增加ISP备案和电子执照配置
- 增加获取视频时长补偿机制
- 优化课程和套餐发货
- 优化验证码
- 优化视频点播回调处理任务
- 优化章节排序初始值和步长
- 优化后台视频上传和转码
- 修正获取子分类查询条件
### [v1.5.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.3)(2022-05-30)
- 优化章节排序初始值和步长
- 修复删除群组前台列表仍然显示问题
- 设置360浏览器的默认模式为webkit
- 修复首页简单模式课程项顶部缺少空白
- vditor本地化彻底弃用cdn.jsdelivr.net
- 调整markdown样式
### [v1.5.2](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.2)(2022-04-17)
- 补充话题列表课程数据结构
- 调整发送验证码相关样式
- 优化套餐和话题下拉课程数据显示
- 去除礼物详情中多出来的"}}"标签
- 修正关闭秒杀订单时没有回填库存的问题
- vditor编辑器切换为七牛cdn加速
### [v1.5.1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.1)(2022-03-17)
- 推荐课程等列表补充属性
- 修正后台评价列表中的搜索链接
- 修正后台点播设置视频码率后500错误问题
- 修正多码率远程播放地址部分为空播放问题
- 修正更新套餐课程缓存传参数据类型问题
- 修正第三方登录解除绑定失败问题
- 使用ServiceTrait归纳获取服务代码
- 优化anonymous隐藏部分字符函数
- 调整积分兑换相关定义命名
- 去除js_vars中关于IM客服的配置
- 增加验证码开关
### [v1.5.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.0)(2022-02-17)
- 调整对内部人员通知任务类型的前缀
- 调整微信和短信通知发送判断逻辑
- 清理后台实用工具的无用文件内容
- 支付后解除秒杀商品锁定
- 加强支付流程数据验证
- 加强退款流程数据验证
- 优化账户创建数据流
- 优化课程创建数据流
- 优化章节创建数据流
- 优化积分商品兑换
- 优化发货逻辑
### [v1.4.9](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.9)(2022-01-01)
- 修正订单消费未奖励积分问题
- 修正前台课程分类排序无效问题
- 修正后台点播防盗链配置显隐藏状态问题
- 修正分享链接非h5环境也会跳转到h5问题
- 修正后台钉钉配置调用错误
- 使用腾讯云新SDK发送短信
- 优化show400错误输出页
- 优化下单时产品检查逻辑
- 优化上传文件筛选限制
- 优化后台配置更新
### [v1.4.8](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.8)(2021-11-28)
- 修正后台下载课程附件问题
- 修正后台登录检查跳转地址
- 修正公众号关注二维码样式问题
- 优化发货失败自动退款逻辑
- 创建交易时增加订单支付检查
- H5增加底部tab图标
### [v1.4.7](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.7)(2021-10-28)
- 更新README.md
- 优化分页查询参数过滤
- 优化后台学员添加和搜索
- 优化后台学员课程过期管理
- 增加编辑会员特权功能
- 增加清空用户头像功能
- 增加编辑器内站外图片自动保存到本地
- 增加CSRF放行白名单
- 完善订单|交易|退款序号
### [v1.4.6](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.6)(2021-10-18)
- 完善首页文章缓存的获取条件
- 完善热门专题的获取条件
- 优化课程章节列表逻辑
- 更新教学中心我的课程获取逻辑
- 修正后台点播和面授类型课时列表宽度未100%铺满问题
- 完善添加积分礼品的逻辑
- 修正编辑课程类型礼品时编辑器初始化js报错
- 修正非root用户后台添加用户时报错
- 修正微信等第三方登录code被重用问题
- 手机端访问web端地址自动跳转到手机端
- 增加锁定用户逻辑(会自动登出锁定用户)
- 增加虚假课程订阅数(用于营销效果)
### [v1.4.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.5)(2021-09-27)
- 修正点击内容分享到微信会额外出现公众号二维码的问题
- 修正后台首页提问和回答的数量统计
- 调整登录限制(邮箱|手机)为注册限制
- 调整订单发货为每一分钟执行一次
- 增强课时安全性,无权限时不返回播放地址或内容
- 抽离出文章关闭,仅我可见操作
- 增加退出群组和解除好友接口
- 增加删除文章和提问接口
- 增加首页推荐教师接口
- 增加微信公众号支付处理
- 增加取消订单功能
- 优化订单API结构
- 优化计划任务
### [v1.4.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.4)(2021-09-17)
- 后台增加邮件手机登录选择配置
- 增加移动端支付选项配置
- 首页增加秒杀,直播,提问,文章接口
- 增加秒杀列表列表接口
- 调整markdown解析安全级别
- 精简取消点赞以及取消收藏逻辑
- 修复浮点转整型精度丢失造成的支付回调失败
- 修复竖屏直播时造成的位置错乱
- 修复视频清晰度配置序列化问题
- 修复评论取消点赞数量不变问题
- 修复章节资源数量问题
- 修复删除课程后引发的用户课程列表错误问题
- 修正课程咨询列表查询条件
- 修正回答,兑换礼品说明重复转译的问题
- 资源下载查询主键由md5改为加密的ID
- 去除上传文件md5唯一索引
- 去除课程发布对章节的要求
- 去除点播回调中的处理数量限制
- 优化文章,课程,提问,群组全文搜索
- 优化直播列表数据结构
- 优化章节目录交互呈现
- 优化后台添加学员重复检查
- 优化订单发货逻辑
- 优化公众号订阅逻辑
### [v1.4.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.3)(2021-08-23)
- 优化邮件验证码
- 优化logo和favicon上传
- 优化api验证码中使用的ticket和rand
- 优化点播和直播地址获取
- 修复部分清晰度外链播放地址为空时切换卡死问题
- 增加QQ微信微博邮件电话等联系配置
- 用户控制台文章和提问列表增加删除过滤
- 去除layim在线客服
- 提高视频转码分辨率
### [v1.4.2](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.2)(2021-08-13)
- 后台增加转码码率配置选项
- 后台增加微聊配置开关
- 优化外链播放地址逻辑
- 访问课程文章等未发布资源404处理
- 优化课件上传不返回md5值的处理
- 优化用户中心内容数据展示
- 前台暂时屏蔽文章仅我可见和关闭评论功能
- 直播增加极速码率选项
- 调整码率标签对应
- 修复后台数据统计中心Hash缓存问题
- 修复未发布的课程仍然可购买问题
- 修复购买课程后学员人数未增加问题
- 增加同步课程数据统计脚本
### [v1.4.1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.1)(2021-08-08)
- AnswerInfo结构补充遗漏的comment_count字段
- AnswerList结构去除deleted字段
- ChapterList结构补充published字段
- 使用开源的播放器DPlayer替换腾讯TcPlayer
- 修正第三方登录开关的判断
- 修正课程方向过滤问题
- 修正教师主页会显示未发布课程问题
- 修正评论删除点击无效问题
- 优化课时列表可点击权限判断
- 优化来源检查域名带端口问题
- 优化微信公众号业务处理类
### [v1.4.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.0)(2021-08-03)
### 更新
- 单页增加自定义别名访问
- 回答增加评论功能
- 顶部导航微聊增加开关控制
- 更新默认的ICP备案链接指向
- 更正部分model定义中字段的类型申明
- 优化章节过多导致页面过长问题
- 优化评论前端部分相关逻辑和交互
- 优化403错误页面使用forward代替redirect
- 优化播放地址中带queryString的扩展名检查
- 修正解除第三登录绑定500错误问题
- 修正教师教授课程未过滤已删除课程问题
- 修正咨询编辑500错误问题
- 修正后台列表中restore_url未定义问题
### [v1.3.9](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.9)(2021-07-24)
### 更新
- 修正分类下无课程时会查询出所有课程问题
- 修正sitemap中的部分路径问题
- 修正课程套餐相关问题
- 优化问答部分相关逻辑
- 优化评论部分相关逻辑
- 优化浏览器Title显示
- 优化审核和举报相关逻辑
- 优化命令行脚本执行输出
- 优化API的分页返回结构
- 增加文章问答评论相关API
- 增加重新统计tag中相关计数计划任务
- 增加tag的使用范围文章问题课程计数
- 站点logo和favicon使用随机文件名
- 增加评价,咨询审核
- 去除编辑器中的酷瓜云课堂标识
- 清理数据迁移文件
### [v1.3.8](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.8)(2021-07-11)
### 更新
- 更正readme中github仓库信息
- 增加清除点播地址缓存命令
- 若干缓存键名重命名 后台站点名称修改为用户站点名称
- 标签名称比较忽略大小写
- 重新设计前后台登录界面
- 更正后台存储设置中图片样式的参数描述
- 记录逻辑删除后浏览重定向到404
- 修正图文类型的章节markdown解析问题
- 优化文章和提问不必要的标签数据提交
- 图文中图片增加点击放大预览功能
- 各数据结构中增加若干业务字段
- COS存储中去除多余的年月目录结构
- 清理优化css
- 修正直播地址问题
- 修正评论审核路由问题
- 修正取消收藏问题
### [v1.3.7](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.7)(2021-06-14)
### 更新
- 升级layui到v2.6.8
- 升级腾讯云播放器到v2.4.0
- 点播增加外链支持
- 源文件增加版权信息
- 优化模块继承基类
- 优化评论审核机制
- 优化课程和群组状态协同逻辑
- 优化用户索引重建逻辑
### [v1.3.6](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.6)(2021-06-04)
### 更新
- 清理没有用到的引用
- 优化界面和CSS样式
- 优化视频无法获取时长处理逻辑
- 优化视频无法转码处理逻辑
- 优化评论审核机制
- 优化评论相关数据更新逻辑
- 优化文章,问答,评论数据更新
- 优化内容标签的更新逻辑
- 优化首页H5的跳转判断
- 优化单页的浏览权限
- 优化Model中的事件方法
- 优化kg_parse_summary函数
- 用户主页加入问答列表
- 修复无法关闭问题讨论
- 修复编辑群组的路由
- 直播去除FLV方式拉流
- xs.question.ini加入忽略列表
- kg_user表增加comment_count字段
### [v1.3.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.5)(2021-05-20)
### 更新
- 更新演示数据
- 优化安装脚本install.sh
- 升级脚本upgrade.sh中加入更新导航缓存
- 撰写文章和提问markdown编辑器通栏显示
- 完善文章和问题的浏览权限
- 优化通用ajax表单提交
- 文章,提问,回答点赞作者有提醒和积分奖励
- 前台增加针对回答的预览访问地址
- 前台增加文章,问题,回答,评论加入举报功能
- 后台增加文章,问题,回答,评论的举报审核功能
- 后台首页增加审核队列统计
### [v1.3.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.4)(2021-05-13)
### 更新
- 增加问答功能
- 增加标签关注功能
- 优化标签功能
- 优化文章功能以及全文搜索
- 优化课程评价,咨询,文章等相关统计
- 优化前台界面
- 后台增加提问和回答审核功能
- 后台增加查看用户在线记录
- 修正后台编辑角色权限错误
### [v1.3.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.3)(2021-04-30)
### 更新
- 前台增加文章发布功能
- 增加文章,咨询,评价,评论相关事件站内提醒
- 增加文章,咨询,评价,评论事件埋点
- 后台首页增加若干统计项目
- 后台增加文章审核功能
- 重构积分历史记录
- 优化在线统计方式
- 优化前台界面
### [v1.3.2](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.2)(2021-04-20)
### 更新
- 前台增文章和章节评论功能
- 后台增加评论相关管理功能
- 优化课程,章节,文章等前台界面
- 优化分享链接的生成和跳转方式
- 优化课程章节文章相关js
- 优化后台数据展示
- 修正后台分类二级分类错位问题
- 修正文章命名空间问题
- 修正后台轮播没有保存问题
### [v1.3.1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.1)(2021-04-09)
### 更新
- 后台增加文章功能
- 后台增加标签功能
- 增加文章全文检索
- 整理命名空间别名
- 更新部分链接打开方式
- xm-select搜索忽略大小写
- 补充遗漏的面授模型章节相关迁移文件
- 修正上次字段整理导致的字段不存在问题
- 修正上次整理发布字段导致的添加单页和帮助错误
- 增加开启/关闭站点终端命令
### [v1.3.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.3.0)(2021-03-26)
### 更新
- 课程增加面授模型
- 重构前台群组成员管理
- 后台增加群组成员管理
- 重构订单存储商品详情数据结构
- 调整用户和群组列表等UI
### [v1.2.9](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.9)(2021-03-22)
### 更新
- 增加限时秒杀功能
- 更新phinx默认环境配置项
- 优化存储相关命名以及逻辑
- 重构轮播图表结构
- 重构套餐数表结构
- 重构会员表结构
- 重构xm-select插件选取内容方式
- 整理UI展现形式
### [v1.2.8](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.8)(2021-03-08)
### 更新
- 数据库迁移脚本整理
- 数据表软删除字段整理
- 微信公众号路由整理
- 退款增加手续费逻辑
- 课程增加不支持退款逻辑
- 会员价格和期限可通过后台配置
- 修复IM通知中字段重命名导致的问题
- 修复购买会员会员标识未改变的问题
- 会员中心订单列表样式调整
### [v1.2.7](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.7)(2021-02-26)
### 新增
- 钉钉机器人群消息通知
- demo分支重置演示帐号计划任务
- 添加学员自动加入相关课程群组
- 后台查看积分记录
### 更新
- 路由重命名 admin.group -> admin.im_group
- 路由重命名 home.group -> home.im_group
- 样式重命名 sidebar-teacher-card -> sidebar-user-card
- 去除顶部积分导航
- 用户中心部分样式调整
- 后台部分导航调整
- 不能删除课程教师问题
- 积分模块可通过后台控制是否启用
- 解除好友关系后好友数量未递减
### [v1.2.6](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.6)(2021-02-20)
### 新增
- 积分兑换机制
- 课程增加原价属性
- gitee提交webhooks自动化部署脚本
### 更新
- course和chapter数据迁移文件中遗漏了recourse_count字段
- app/Caches/TopicCourseList不存在
- Model文件属性定义默认值
- 隐藏非付费课程的咨询服务
- 教学中心教师直播推流按钮无反应
- 用户中心部分样式调整
- 播放器清晰度标签和实际的清晰度不对应
- CNZZ统计代码会显示出站长统计图标
- 自动安装后访问站点500错误
- 自动更新脚本可更新css和js版本号
### [v1.2.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.5)(2021-01-20)
### 新增
- 自动化安装脚本
- 自动化更新脚本
- 自动化备份脚本
### 更新
- 更新ip2region包
- 更新php-cron-scheduler包
- 替换aferrandini/phpqrcode为endroid/qr-code
- 替换joyqi/hyper-down为league/commonmark
- 移除lcobucci/jwt包
- 相关连接指向官网
### [v1.2.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.4)(2021-01-10)
#### 增加
- 后台增加上传logo和favicon图标
- 后台增加公众号自定义菜单配置
- 课程页增加咨询
### 优化
- oauth中state参数为安全base64加解码
- 判断是否api请求逻辑
- findById参数类型不对时抛出异常
- task表增加索引加快数据查找
- markdown内容解析改由后端完成
- 公众号应答处理逻辑
### [v1.2.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.3)(2021-01-03)
#### 增加
- 多人使用同一帐号防范机制
- 首页缓存刷新工具
- 课程综合评分
- 课程推荐
#### 修复
- phinx-migration-generator 无符号问题
- online表并发写入重复记录问题
- 计划任务生成sitemap.xml失败
### [v1.2.2](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.2)(2020-12-24)
#### 增加
- 登录账户微信提醒
- 购买成功微信提醒
- 退款成功微信提醒
- 开始直播微信提醒
- 咨询回复微信提醒
- 咨询回复短信提醒
#### 修复
- 创建章节,关联表数据没有生成
- 创建群组没有生成max_im_group_id缓存
- 课程分类列表没有过滤掉帮助分类的内容
- 创建角色字段routes MySQL text 类型报错
- 低品质视频无法播放
- 后台遗漏的权限
### [v1.2.1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.1)(2020-12-10)
- 增加QQ微信微博第三方登录
- 代码优化以及问题修复
### [v1.2.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.0)(2020-11-25)
- 增加客户端api
- 代码优化以及问题修复
### [v1.1.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.1.0)(2020-10-08)
- 增加运营统计功能
- 增加课程资料功能
- 增加changelog
- 忽略schema
- 账户安全页面调整
- 简化部分路由
- 修复相关课程列表undefined问题
### [v1.0.0-beta1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.0.0-beta1)(2020-09-26)
前台功能:
- 注册、登录、忘记密码
- 首页:轮播、新上课程、免费课程、会员课程
- 课程列表:多维度筛选,多维度排序
- 课程详情:章节,咨询,评价,相关课程,推荐课程,课程套餐
- 课时详情:点播,直播,图文
- 购买支付:课程,套餐,赞赏,会员
- 教师列表
- 群组列表
- 即时通讯
- 在线客服
- 全文检索:课程、群组、用户
- 个人主页:我的课程,我的收藏,我的好友,我的群组
- 会员中心:我的课程,我的收藏,我的咨询,我的评价,我的好友,我的群组,我的订单,我的退款,个人信息,账户安全
- 教学中心 :我的课程,我的直播,我的咨询
后台功能:
- 课程管理:课程列表,课程搜索,添加课程,编辑课程,删除课程,课程分类
- 套餐管理:套餐列表,添加套餐,编辑套餐,删除套餐
- 话题管理:话题列表,添加话题,编辑话题,删除话题
- 单页管理:单页列表,添加单页,编辑单页,删除单页
- 帮助管理:帮助列表,添加帮助,编辑帮助,删除帮助,帮助分类
- 学员管理:学员列表,搜索学员,添加学员,编辑学员,学习记录
- 咨询管理:咨询列表,搜索咨询,编辑咨询,删除咨询
- 评价管理:评价列表,搜索评价,编辑评价,删除评价
- 群组管理:群组列表,搜索群组,编辑群组,删除群组
- 轮播管理:轮播列表,编辑轮播,删除轮播
- 导航管理:导航列表,编辑导航,删除导航
- 订单管理:订单列表,搜索订单,订单详情
- 交易管理:交易列表,搜索交易,交易详情
- 退款管理:退款列表,搜索退款,退款详情,退款审核
- 用户管理:用户列表,编辑用户,添加用户
- 角色管理:角色列表,编辑角色,删除角色
- 操作记录:记录列表,搜索记录,记录详情
- 系统配置:网站,密钥,存储,点播,直播,短信,邮件,验证码,支付,会员,微聊

339
LICENSE Normal file
View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

112
README.md
View File

@ -1,82 +1,66 @@
## 酷瓜云课堂
#### 项目介绍
[![酷瓜云课堂-开源知识付费解决方案](https://portal-1255691183.file.myqcloud.com/img/content/63ec392618bd5.png)](https://www.koogua.com)
酷瓜云课堂,依托腾讯云基础服务架构,采用 C 扩展框架 Phalcon 开发,致力网络教育软件。
### 系统介绍
#### 系统功能
酷瓜云课堂依托腾讯云基础服务架构采用C扩展框架Phalcon开发GPL-2.0开源协议,致力开源网课系统,开源网校系统,开源知识付费系统,开源在线教育系统。
实现了点播、直播、专栏、会员、微聊等,是一个完整的产品,具体功能我也不想写一大堆,自己体验吧!
![star](https://www.koogua.com/gitee/badge?user=koogua&project=course-tencent-cloud&type=star)
![fork](https://www.koogua.com/gitee/badge?user=koogua&project=course-tencent-cloud&type=fork)
![license](https://www.koogua.com/gitee/badge?user=koogua&project=course-tencent-cloud&type=license)
![release](https://www.koogua.com/gitee/badge?user=koogua&project=course-tencent-cloud&type=release)
### 系统功能
实现了点播、直播、专栏、问答、会员、积分等。
友情提示:
- 演示系统配置低2核2G1M 跑多个容器)切莫压测
- 课程数据来源于网络(无实质内容)切莫购买
- 管理后台已禁止数据提交,私密配置已过滤
桌面端演示:
- [前台演示](https://ctc.koogua.com)
- [后台演示](https://ctc.koogua.com/admin)
帐号100015@163.com / 123456 (前后台通用)
演示账号100015@163.com / 123456 (前后台通用)
友情提示:
H5手机端演示:
- 系统配置低1核 1G 1M 跑多个容器),切莫压测
- 课程数据来源于网络(无实质内容),切莫购买
- 管理后台已禁止数据提交,私密配置已过滤
![H5二维码](https://portal-1255691183.file.myqcloud.com/img/content/616fc238895b7.png)
#### 项目组件
演示账号13507083515 / 123456
- 后台框架:[phalcon 3.4.5](https://phalcon.io)
- 前端框架:[layui 2.5.6](https://layui.com) [layim 3.9.5](https://www.layui.com/layim)(已授权)
- 全文检索:[xunsearch 1.4.9](http://www.xunsearch.com)
- 即时通讯:[workerman 3.5.22](https://workerman.net)
支付流程演示:
- [MySQL提升课程全面讲解MySQL架构设计0.01元)](https://ctc.koogua.com/order/confirm?item_id=1390&item_type=1)
- [Nginx入门到实践Nginx中间件0.01元)](https://ctc.koogua.com/order/confirm?item_id=1286&item_type=1)
- [数据库与中间件的基础必修课0.02元)](https://ctc.koogua.com/order/confirm?item_id=80&item_type=2)
Tips: 测试支付请用手机号注册一个新账户,以便接收订单通知,以及避免课程无法购买
微信推送演示:
Tips: 请用手机注册一个新账号,用户中心 -> 关注订阅,扫码关注公众号。之后的登录、购买、退款、直播、咨询等会有消息推送。
### 项目组件
- 后台框架:[phalcon 3.4](https://phalcon.io)
- 前端框架:[layui 2.9](https://layui.dev)
- 全文检索:[xunsearch 1.4](http://www.xunsearch.com)
- 基础依赖:[php7.3](https://php.net) [mysql5.7](https://mysql.com) [redis5.0](https://redis.io)
#### 使用协议
### 项目文档
虽然尝试了解过开源协议,但是理解的模棱两可,干脆用自己的协议吧。
- [运行环境搭建](https://www.koogua.com/page/wiki)
- [系统服务配置](https://www.koogua.com/page/wiki)
- [客户终端配置](https://www.koogua.com/page/wiki)
1. 本系统属于强业务类型,非通用类库框架,不适合再次衍生发布。
2. 在保留我们版权标识的前提下,用户可以修改以满足自己的需求,可以用于商业用途。
3. 有限社区支持,用户对自己的行为负责。
#### 安装指南
- [运行环境搭建](https://gitee.com/koogua/course-tencent-cloud-docker)
- [系统服务配置](https://gitee.com/koogua/course-tencent-cloud/wikis)
#### 开发计划
- 桌面端:进行中
- 移动端:待启动
- 小程序:待启动
#### 意见反馈
- [在线反馈](https://gitee.com/koogua/course-tencent-cloud/issues)(推荐)
- QQ邮箱: 76632555@qq.com
- QQ群组: 787363898
#### 加入我们
这是一个创业项目,个人能力和精力有限,要兼顾产品规划以及开发,还要处理很多琐碎事情。目前在南山科技园某个众创空间,希望有 **深圳前端同学** 加入我们。
联系邮箱76632555@qq.com
#### 通过这个项目能学到什么?
- 项目规划phalcon缓存JWT即时通讯全文检索
- dockersupervisordevops
- gitlinuxphpmysqlredisnginx
#### 有阿里云版吗?
阿里云版规划中,之前阿里云服务过期未续费,所以腾讯云版本先出。
#### 代码有加密吗?
所有代码都公开授权代码除外例如layim没有所谓的商业版和付费插件。
#### 有商业服务吗?
生存才能发展,我们目前提供的服务包括:
- 系统安装
- 系统定制
- 企业授权
### 意见反馈
- [码云平台](https://gitee.com/koogua/course-tencent-cloud/issues)
- [官方社区](https://www.koogua.com/community)
- QQ交流群: 787363898

5
SECURITY.md Normal file
View File

@ -0,0 +1,5 @@
# Security Policy
## Reporting a Vulnerability
Please report security issues to `xiaochong0302@gmail.com`

View File

@ -0,0 +1,61 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Question as QuestionRepo;
class AnswerList extends Builder
{
public function handleQuestions(array $answers)
{
$questions = $this->getQuestions($answers);
foreach ($answers as $key => $answer) {
$answers[$key]['question'] = $questions[$answer['question_id']] ?? null;
}
return $answers;
}
public function handleUsers(array $answers)
{
$users = $this->getUsers($answers);
foreach ($answers as $key => $answer) {
$answers[$key]['owner'] = $users[$answer['owner_id']] ?? null;
}
return $answers;
}
public function getQuestions(array $answers)
{
$ids = kg_array_column($answers, 'question_id');
$questionRepo = new QuestionRepo();
$questions = $questionRepo->findByIds($ids, ['id', 'title']);
$result = [];
foreach ($questions->toArray() as $question) {
$result[$question['id']] = $question;
}
return $result;
}
public function getUsers(array $answers)
{
$ids = kg_array_column($answers, 'owner_id');
return $this->getShallowUserByIds($ids);
}
}

View File

@ -0,0 +1,75 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Article as ArticleRepo;
use Phalcon\Text;
class ArticleFavoriteList extends Builder
{
public function handleArticles(array $relations)
{
$articles = $this->getArticles($relations);
foreach ($relations as $key => $value) {
$relations[$key]['article'] = $articles[$value['article_id']] ?? null;
}
return $relations;
}
public function handleUsers(array $relations)
{
$users = $this->getUsers($relations);
foreach ($relations as $key => $value) {
$relations[$key]['user'] = $users[$value['user_id']] ?? null;
}
return $relations;
}
public function getArticles(array $relations)
{
$ids = kg_array_column($relations, 'article_id');
$articleRepo = new ArticleRepo();
$columns = [
'id', 'title', 'cover',
'view_count', 'like_count',
'comment_count', 'favorite_count',
];
$articles = $articleRepo->findByIds($ids, $columns);
$baseUrl = kg_cos_url();
$result = [];
foreach ($articles->toArray() as $article) {
if (!empty($article['cover']) && !Text::startsWith($article['cover'], 'http')) {
$article['cover'] = $baseUrl . $article['cover'];
}
$result[$article['id']] = $article;
}
return $result;
}
public function getUsers(array $relations)
{
$ids = kg_array_column($relations, 'user_id');
return $this->getShallowUserByIds($ids);
}
}

View File

@ -0,0 +1,74 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Caches\CategoryAllList as CategoryAllListCache;
use App\Models\Category as CategoryModel;
class ArticleList extends Builder
{
public function handleArticles(array $articles)
{
foreach ($articles as $key => $article) {
$articles[$key]['tags'] = json_decode($article['tags'], true);
}
return $articles;
}
public function handleCategories(array $articles)
{
$categories = $this->getCategories();
foreach ($articles as $key => $article) {
$articles[$key]['category'] = $categories[$article['category_id']] ?? null;
}
return $articles;
}
public function handleUsers(array $articles)
{
$users = $this->getUsers($articles);
foreach ($articles as $key => $article) {
$articles[$key]['owner'] = $users[$article['owner_id']] ?? null;
}
return $articles;
}
public function getCategories()
{
$cache = new CategoryAllListCache();
$items = $cache->get(CategoryModel::TYPE_ARTICLE);
if (empty($items)) return [];
$result = [];
foreach ($items as $item) {
$result[$item['id']] = [
'id' => $item['id'],
'name' => $item['name'],
];
}
return $result;
}
public function getUsers($articles)
{
$ids = kg_array_column($articles, 'owner_id');
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,10 +1,16 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use Phalcon\Mvc\User\Component;
use App\Repos\User as UserRepo;
use Phalcon\Di\Injectable;
class Builder extends Component
class Builder extends Injectable
{
public function objects(array $items)
@ -12,4 +18,22 @@ class Builder extends Component
return kg_array_object($items);
}
protected function getShallowUserByIds(array $ids)
{
$userRepo = new UserRepo();
$users = $userRepo->findShallowUserByIds($ids);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
}
}

View File

@ -1,17 +1,23 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Models\Category as CategoryModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
use App\Repos\Category as CategoryRepo;
class CategoryTreeList extends Builder
{
public function handle($type)
{
$topCategories = $this->findChildCategories($type, 0);
$categoryRepo = new CategoryRepo();
$topCategories = $categoryRepo->findTopCategories($type);
if ($topCategories->count() == 0) {
return [];
@ -23,6 +29,8 @@ class CategoryTreeList extends Builder
$list[] = [
'id' => $category->id,
'name' => $category->name,
'alias' => $category->alias,
'icon' => $category->icon,
'children' => $this->handleChildren($category),
];
}
@ -32,7 +40,9 @@ class CategoryTreeList extends Builder
protected function handleChildren(CategoryModel $category)
{
$subCategories = $this->findChildCategories($category->type, $category->id);
$categoryRepo = new CategoryRepo();
$subCategories = $categoryRepo->findChildCategories($category->id);
if ($subCategories->count() == 0) {
return [];
@ -44,34 +54,12 @@ class CategoryTreeList extends Builder
$list[] = [
'id' => $category->id,
'name' => $category->name,
'alias' => $category->alias,
'icon' => $category->icon,
];
}
return $list;
}
/**
* @param string $type
* @param int $parentId
* @return ResultsetInterface|Resultset|CategoryModel[]
*/
protected function findChildCategories($type = 'course', $parentId = 0)
{
$query = CategoryModel::query();
$query->where('published = 1');
if ($type) {
$query->andWhere('type = :type:', ['type' => $type]);
}
if ($parentId) {
$query->andWhere('parent_id = :parent_id:', ['parent_id' => $parentId]);
}
$query->orderBy('priority ASC');
return $query->execute();
}
}

View File

@ -0,0 +1,34 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
class CommentList extends Builder
{
public function handleUsers(array $comments)
{
$users = $this->getUsers($comments);
foreach ($comments as $key => $comment) {
$comments[$key]['owner'] = $users[$comment['owner_id']] ?? null;
$comments[$key]['to_user'] = $users[$comment['to_user_id']] ?? null;
}
return $comments;
}
public function getUsers(array $comments)
{
$ownerIds = kg_array_column($comments, 'owner_id');
$toUserIds = kg_array_column($comments, 'to_user_id');
$ids = array_merge($ownerIds, $toUserIds);
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,10 +1,13 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Chapter as ChapterRepo;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class ConsultList extends Builder
{
@ -14,7 +17,7 @@ class ConsultList extends Builder
$courses = $this->getCourses($consults);
foreach ($consults as $key => $consult) {
$consults[$key]['course'] = $courses[$consult['course_id']] ?? new \stdClass();
$consults[$key]['course'] = $courses[$consult['course_id']] ?? null;
}
return $consults;
@ -25,7 +28,8 @@ class ConsultList extends Builder
$users = $this->getUsers($consults);
foreach ($consults as $key => $consult) {
$consults[$key]['owner'] = $users[$consult['owner_id']] ?? new \stdClass();
$consults[$key]['owner'] = $users[$consult['owner_id']] ?? null;
$consults[$key]['replier'] = $users[$consult['replier_id']] ?? null;
}
return $consults;
@ -48,41 +52,13 @@ class ConsultList extends Builder
return $result;
}
public function getChapters(array $consults)
{
$ids = kg_array_column($consults, 'chapter_id');
$chapterRepo = new ChapterRepo();
$chapters = $chapterRepo->findByIds($ids, ['id', 'title']);
$result = [];
foreach ($chapters->toArray() as $chapter) {
$result[$chapter['id']] = $chapter;
}
return $result;
}
public function getUsers(array $consults)
{
$ids = kg_array_column($consults, 'owner_id');
$ownerIds = kg_array_column($consults, 'owner_id');
$replierIds = kg_array_column($consults, 'replier_id');
$ids = array_merge($ownerIds, $replierIds);
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
@ -29,6 +34,7 @@ class CourseChapterList extends Builder
'id' => $chapter->id,
'title' => $chapter->title,
'model' => $chapter->model,
'published' => $chapter->published,
'children' => $this->handleChildren($chapter),
];
}
@ -65,6 +71,7 @@ class CourseChapterList extends Builder
'id' => $lesson->id,
'title' => $lesson->title,
'model' => $lesson->model,
'published' => $lesson->published,
'free' => $lesson->free,
'attrs' => $attrs,
];

View File

@ -1,9 +1,13 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class CourseFavoriteList extends Builder
{
@ -13,7 +17,7 @@ class CourseFavoriteList extends Builder
$courses = $this->getCourses($relations);
foreach ($relations as $key => $value) {
$relations[$key]['course'] = $courses[$value['course_id']] ?? new \stdClass();
$relations[$key]['course'] = $courses[$value['course_id']] ?? null;
}
return $relations;
@ -24,7 +28,7 @@ class CourseFavoriteList extends Builder
$users = $this->getUsers($relations);
foreach ($relations as $key => $value) {
$relations[$key]['user'] = $users[$value['user_id']] ?? new \stdClass();
$relations[$key]['user'] = $users[$value['user_id']] ?? null;
}
return $relations;
@ -65,20 +69,7 @@ class CourseFavoriteList extends Builder
{
$ids = kg_array_column($relations, 'user_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,10 +1,14 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Caches\CategoryList as CategoryListCache;
use App\Caches\CategoryAllList as CategoryAllListCache;
use App\Models\Category as CategoryModel;
use App\Repos\User as UserRepo;
class CourseList extends Builder
{
@ -14,7 +18,7 @@ class CourseList extends Builder
$categories = $this->getCategories();
foreach ($courses as $key => $course) {
$courses[$key]['category'] = $categories[$course['category_id']] ?? new \stdClass();
$courses[$key]['category'] = $categories[$course['category_id']] ?? null;
}
return $courses;
@ -25,7 +29,7 @@ class CourseList extends Builder
$teachers = $this->getTeachers($courses);
foreach ($courses as $key => $course) {
$courses[$key]['teacher'] = $teachers[$course['teacher_id']] ?? new \stdClass();
$courses[$key]['teacher'] = $teachers[$course['teacher_id']] ?? null;
}
return $courses;
@ -33,13 +37,11 @@ class CourseList extends Builder
public function getCategories()
{
$cache = new CategoryListCache();
$cache = new CategoryAllListCache();
$items = $cache->get(CategoryModel::TYPE_COURSE);
if (empty($items)) {
return [];
}
if (empty($items)) return [];
$result = [];
@ -57,20 +59,7 @@ class CourseList extends Builder
{
$ids = kg_array_column($courses, 'teacher_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
@ -13,7 +18,7 @@ class CourseTopicList extends Builder
$courses = $this->getCourses($relations);
foreach ($relations as $key => $value) {
$relations[$key]['course'] = $courses[$value['course_id']] ?? new \stdClass();
$relations[$key]['course'] = $courses[$value['course_id']] ?? null;
}
return $relations;
@ -24,7 +29,7 @@ class CourseTopicList extends Builder
$topics = $this->getTopics($relations);
foreach ($relations as $key => $value) {
$relations[$key]['topic'] = $topics[$value['topic_id']] ?? new \stdClass();
$relations[$key]['topic'] = $topics[$value['topic_id']] ?? null;
}
return $relations;
@ -40,7 +45,7 @@ class CourseTopicList extends Builder
'id', 'title', 'cover',
'market_price', 'vip_price',
'rating', 'model', 'level', 'attrs',
'user_count', 'lesson_count',
'user_count', 'lesson_count', 'review_count', 'favorite_count',
];
$courses = $courseRepo->findByIds($ids, $columns);

View File

@ -1,9 +1,13 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class CourseUserList extends Builder
{
@ -13,7 +17,7 @@ class CourseUserList extends Builder
$courses = $this->getCourses($relations);
foreach ($relations as $key => $value) {
$relations[$key]['course'] = $courses[$value['course_id']] ?? new \stdClass();
$relations[$key]['course'] = $courses[$value['course_id']] ?? null;
}
return $relations;
@ -24,7 +28,7 @@ class CourseUserList extends Builder
$users = $this->getUsers($relations);
foreach ($relations as $key => $value) {
$relations[$key]['user'] = $users[$value['user_id']] ?? new \stdClass();
$relations[$key]['user'] = $users[$value['user_id']] ?? null;
}
return $relations;
@ -39,8 +43,8 @@ class CourseUserList extends Builder
$columns = [
'id', 'title', 'cover',
'market_price', 'vip_price',
'rating', 'model', 'level', 'attrs',
'user_count', 'lesson_count', 'review_count', 'favorite_count',
'rating', 'model', 'level', 'attrs', 'published', 'deleted',
'user_count', 'fake_user_count', 'lesson_count', 'review_count', 'favorite_count',
];
$courses = $courseRepo->findByIds($ids, $columns);
@ -50,8 +54,15 @@ class CourseUserList extends Builder
$result = [];
foreach ($courses->toArray() as $course) {
if ($course['fake_user_count'] > $course['user_count']) {
$course['user_count'] = $course['fake_user_count'];
}
$course['cover'] = $baseUrl . $course['cover'];
$course['attrs'] = json_decode($course['attrs'], true);
$result[$course['id']] = $course;
}
@ -62,20 +73,7 @@ class CourseUserList extends Builder
{
$ids = kg_array_column($relations, 'user_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,99 +0,0 @@
<?php
namespace App\Builders;
use App\Repos\Chapter as ChapterRepo;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class DanmuList extends Builder
{
public function handleCourses(array $danmus)
{
$courses = $this->getCourses($danmus);
foreach ($danmus as $key => $danmu) {
$danmus[$key]['course'] = $courses[$danmu['course_id']] ?? new \stdClass();
}
return $danmus;
}
public function handleChapters(array $danmus)
{
$chapters = $this->getChapters($danmus);
foreach ($danmus as $key => $danmu) {
$danmus[$key]['chapter'] = $chapters[$danmu['chapter_id']] ?? new \stdClass();
}
return $danmus;
}
public function handleUsers(array $danmus)
{
$users = $this->getUsers($danmus);
foreach ($danmus as $key => $danmu) {
$danmus[$key]['owner'] = $users[$danmu['owner_id']] ?? new \stdClass();
}
return $danmus;
}
public function getCourses(array $danmus)
{
$ids = kg_array_column($danmus, 'course_id');
$courseRepo = new CourseRepo();
$courses = $courseRepo->findByIds($ids, ['id', 'title']);
$result = [];
foreach ($courses->toArray() as $course) {
$result[$course['id']] = $course;
}
return $result;
}
public function getChapters(array $danmus)
{
$ids = kg_array_column($danmus, 'chapter_id');
$chapterRepo = new ChapterRepo();
$chapters = $chapterRepo->findByIds($ids, ['id', 'title']);
$result = [];
foreach ($chapters->toArray() as $chapter) {
$result[$chapter['id']] = $chapter;
}
return $result;
}
public function getUsers(array $danmus)
{
$ids = kg_array_column($danmus, 'owner_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
}
}

View File

@ -1,8 +1,13 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Caches\CategoryList as CategoryListCache;
use App\Caches\CategoryAllList as CategoryAllListCache;
use App\Models\Category as CategoryModel;
class HelpList extends Builder
@ -13,7 +18,7 @@ class HelpList extends Builder
$categories = $this->getCategories();
foreach ($helps as $key => $help) {
$helps[$key]['category'] = $categories[$help['category_id']] ?? new \stdClass();
$helps[$key]['category'] = $categories[$help['category_id']] ?? null;
}
return $helps;
@ -21,7 +26,7 @@ class HelpList extends Builder
public function getCategories()
{
$cache = new CategoryListCache();
$cache = new CategoryAllListCache();
$items = $cache->get(CategoryModel::TYPE_HELP);

View File

@ -1,46 +0,0 @@
<?php
namespace App\Builders;
use App\Repos\User as UserRepo;
class ImFriendUserList extends Builder
{
public function handleFriends(array $relations)
{
$users = $this->getFriends($relations);
foreach ($relations as $key => $value) {
$relations[$key]['friend'] = $users[$value['friend_id']] ?? new \stdClass();
}
return $relations;
}
public function getFriends(array $relations)
{
$ids = kg_array_column($relations, 'friend_id');
$userRepo = new UserRepo();
$columns = [
'id', 'name', 'avatar', 'title', 'about', 'vip',
'gender', 'area', 'active_time',
];
$users = $userRepo->findByIds($ids, $columns);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
}
}

View File

@ -1,70 +0,0 @@
<?php
namespace App\Builders;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class ImGroupList extends Builder
{
public function handleCourses(array $groups)
{
$courses = $this->getCourses($groups);
foreach ($groups as $key => $group) {
$groups[$key]['course'] = $courses[$group['course_id']] ?? new \stdClass();
}
return $groups;
}
public function handleUsers(array $groups)
{
$users = $this->getUsers($groups);
foreach ($groups as $key => $group) {
$groups[$key]['owner'] = $users[$group['owner_id']] ?? new \stdClass();
}
return $groups;
}
public function getCourses(array $groups)
{
$ids = kg_array_column($groups, 'course_id');
$courseRepo = new CourseRepo();
$courses = $courseRepo->findByIds($ids, ['id', 'title']);
$result = [];
foreach ($courses->toArray() as $course) {
$result[$course['id']] = $course;
}
return $result;
}
public function getUsers(array $groups)
{
$ids = kg_array_column($groups, 'owner_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
}
}

View File

@ -1,100 +0,0 @@
<?php
namespace App\Builders;
use App\Repos\ImGroup as ImGroupRepo;
use App\Repos\User as UserRepo;
class ImGroupUserList extends Builder
{
public function handleGroups(array $relations)
{
$groups = $this->getGroups($relations);
foreach ($relations as $key => $value) {
$relations[$key]['group'] = $groups[$value['group_id']] ?? new \stdClass();
}
return $relations;
}
public function handleUsers(array $relations)
{
$users = $this->getUsers($relations);
foreach ($relations as $key => $value) {
$relations[$key]['user'] = $users[$value['user_id']] ?? new \stdClass();
}
return $relations;
}
public function getUsers(array $relations)
{
$ids = kg_array_column($relations, 'user_id');
$userRepo = new UserRepo();
$columns = ['id', 'name', 'avatar', 'title', 'about', 'vip'];
$users = $userRepo->findByIds($ids, $columns);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
}
public function getGroups(array $relations)
{
$ids = kg_array_column($relations, 'group_id');
$groupRepo = new ImGroupRepo();
$columns = ['id', 'type', 'name', 'avatar', 'about', 'owner_id', 'user_count', 'msg_count'];
$groups = $groupRepo->findByIds($ids, $columns);
$users = $this->getGroupOwners($groups->toArray());
$baseUrl = kg_cos_url();
$result = [];
foreach ($groups->toArray() as $group) {
$group['avatar'] = $baseUrl . $group['avatar'];
$group['owner'] = $users[$group['owner_id']] ?? new \stdClass();
unset($group['owner_id']);
$result[$group['id']] = $group;
}
return $result;
}
protected function getGroupOwners(array $groups)
{
$ids = kg_array_column($groups, 'owner_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name']);
$result = [];
if ($users->count() > 0) {
foreach ($users->toArray() as $user) {
$result[$user['id']] = $user;
}
}
return $result;
}
}

View File

@ -1,41 +0,0 @@
<?php
namespace App\Builders;
use App\Repos\User as UserRepo;
class ImMessageList extends Builder
{
public function handleSenders(array $messages)
{
$users = $this->getSenders($messages);
foreach ($messages as $key => $message) {
$messages[$key]['sender'] = $users[$message['sender_id']] ?? new \stdClass();
}
return $messages;
}
public function getSenders(array $messages)
{
$ids = kg_array_column($messages, 'sender_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
}
}

View File

@ -1,10 +1,14 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Chapter as ChapterRepo;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class LearningList extends Builder
{
@ -14,7 +18,7 @@ class LearningList extends Builder
$courses = $this->getCourses($relations);
foreach ($relations as $key => $value) {
$relations[$key]['course'] = $courses[$value['course_id']] ?? new \stdClass();
$relations[$key]['course'] = $courses[$value['course_id']] ?? null;
}
return $relations;
@ -25,7 +29,7 @@ class LearningList extends Builder
$chapters = $this->getChapters($relations);
foreach ($relations as $key => $value) {
$relations[$key]['chapter'] = $chapters[$value['chapter_id']] ?? new \stdClass();
$relations[$key]['chapter'] = $chapters[$value['chapter_id']] ?? null;
}
return $relations;
@ -36,7 +40,7 @@ class LearningList extends Builder
$users = $this->getUsers($relations);
foreach ($relations as $key => $value) {
$relations[$key]['user'] = $users[$value['user_id']] ?? new \stdClass();
$relations[$key]['user'] = $users[$value['user_id']] ?? null;
}
return $relations;
@ -80,17 +84,7 @@ class LearningList extends Builder
{
$ids = kg_array_column($relations, 'user_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name']);
$result = [];
foreach ($users->toArray() as $user) {
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

95
app/Builders/LiveList.php Normal file
View File

@ -0,0 +1,95 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Chapter as ChapterRepo;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class LiveList extends Builder
{
public function handleCourses(array $lives)
{
$courses = $this->getCourses($lives);
foreach ($lives as $key => $live) {
$lives[$key]['course'] = $courses[$live['course_id']] ?? null;
}
return $lives;
}
public function handleChapters(array $lives)
{
$chapters = $this->getChapters($lives);
foreach ($lives as $key => $live) {
$lives[$key]['chapter'] = $chapters[$live['chapter_id']] ?? null;
}
return $lives;
}
public function getCourses(array $lives)
{
$courseIds = kg_array_column($lives, 'course_id');
$courseRepo = new CourseRepo();
$courses = $courseRepo->findByIds($courseIds, ['id', 'title', 'cover', 'teacher_id']);
$teacherIds = kg_array_column($courses->toArray(), 'teacher_id');
$userRepo = new UserRepo();
$users = $userRepo->findShallowUserByIds($teacherIds);
$baseUrl = kg_cos_url();
$teachers = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$teachers[$user['id']] = $user;
}
$result = [];
foreach ($courses->toArray() as $course) {
$course['cover'] = $baseUrl . $course['cover'];
$course['teacher'] = $teachers[$course['teacher_id']] ?? null;
$result[$course['id']] = [
'id' => $course['id'],
'title' => $course['title'],
'cover' => $course['cover'],
'teacher' => $course['teacher'],
];
}
return $result;
}
public function getChapters(array $lives)
{
$ids = kg_array_column($lives, 'chapter_id');
$chapterRepo = new ChapterRepo();
$chapters = $chapterRepo->findByIds($ids, ['id', 'title']);
$result = [];
foreach ($chapters->toArray() as $chapter) {
$result[$chapter['id']] = $chapter;
}
return $result;
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
@ -63,6 +68,7 @@ class NavTreeList extends Builder
return NavModel::query()
->where('parent_id = :parent_id:', ['parent_id' => $navId])
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('priority ASC')
->execute();
}
@ -75,7 +81,9 @@ class NavTreeList extends Builder
{
return NavModel::query()
->where('position = :position:', ['position' => $position])
->andWhere('level = 1 AND published = 1')
->andWhere('level = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('priority ASC')
->execute();
}

View File

@ -0,0 +1,34 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
class NotificationList extends Builder
{
public function handleUsers(array $notifications)
{
$users = $this->getUsers($notifications);
foreach ($notifications as $key => $notification) {
$notifications[$key]['sender'] = $users[$notification['sender_id']] ?? null;
$notifications[$key]['receiver'] = $users[$notification['receiver_id']] ?? null;
}
return $notifications;
}
public function getUsers(array $notifications)
{
$senderIds = kg_array_column($notifications, 'sender_id');
$receiverIds = kg_array_column($notifications, 'receiver_id');
$ids = array_merge($senderIds, $receiverIds);
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,9 +1,14 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Models\Course as CourseModel;
use App\Models\Order as OrderModel;
use App\Repos\User as UserRepo;
class OrderList extends Builder
{
@ -24,7 +29,7 @@ class OrderList extends Builder
$users = $this->getUsers($orders);
foreach ($orders as $key => $order) {
$orders[$key]['owner'] = $users[$order['owner_id']] ?? new \stdClass();
$orders[$key]['owner'] = $users[$order['owner_id']] ?? null;
}
return $orders;
@ -37,7 +42,7 @@ class OrderList extends Builder
public function handleItems(array $orders)
{
foreach ($orders as $key => $order) {
$itemInfo = $this->handleItem($order);
$itemInfo = $this->handleItemInfo($order);
$orders[$key]['item_info'] = $itemInfo;
}
@ -48,7 +53,7 @@ class OrderList extends Builder
* @param array $order
* @return array|mixed
*/
public function handleItem(array $order)
public function handleItemInfo(array $order)
{
$itemInfo = [];
@ -67,6 +72,57 @@ class OrderList extends Builder
return $itemInfo;
}
/**
* @param array $order
* @return array|mixed
*/
public function handleMeInfo(array $order)
{
$me = [
'allow_pay' => 0,
'allow_cancel' => 0,
'allow_refund' => 0,
];
$payStatusOk = $order['status'] == OrderModel::STATUS_PENDING ? 1 : 0;
$cancelStatusOk = $order['status'] == OrderModel::STATUS_PENDING ? 1 : 0;
$refundStatusOk = $order['status'] == OrderModel::STATUS_FINISHED ? 1 : 0;
if ($order['item_type'] == OrderModel::ITEM_COURSE) {
$course = $order['item_info']['course'];
$courseModelOk = $course['model'] != CourseModel::MODEL_OFFLINE;
$refundTimeOk = $course['refund_expiry_time'] > time();
$me['allow_refund'] = $courseModelOk && $refundStatusOk && $refundTimeOk ? 1 : 0;
} elseif ($order['item_type'] == OrderModel::ITEM_PACKAGE) {
$courses = $order['item_info']['courses'];
$refundTimeOk = false;
foreach ($courses as $course) {
if ($course['refund_expiry_time'] > time()) {
$refundTimeOk = true;
}
}
$me['allow_refund'] = $refundStatusOk && $refundTimeOk ? 1 : 0;
}
if ($payStatusOk == 1) {
$me['allow_pay'] = 1;
}
if ($cancelStatusOk == 1) {
$me['allow_cancel'] = 1;
}
return $me;
}
/**
* @param string $itemInfo
* @return mixed
@ -97,20 +153,6 @@ class OrderList extends Builder
return $itemInfo;
}
/**
* @param string $itemInfo
* @return mixed
*/
protected function handleRewardInfo($itemInfo)
{
if (!empty($itemInfo) && is_string($itemInfo)) {
$itemInfo = json_decode($itemInfo, true);
$itemInfo['course']['cover'] = $this->imgBaseUrl . $itemInfo['course']['cover'];
}
return $itemInfo;
}
/**
* @param string $itemInfo
* @return mixed
@ -132,17 +174,7 @@ class OrderList extends Builder
{
$ids = kg_array_column($orders, 'owner_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name']);
$result = [];
foreach ($users->toArray() as $user) {
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -0,0 +1,75 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Question as QuestionRepo;
use Phalcon\Text;
class QuestionFavoriteList extends Builder
{
public function handleQuestions(array $relations)
{
$questions = $this->getQuestions($relations);
foreach ($relations as $key => $value) {
$relations[$key]['question'] = $questions[$value['question_id']] ?? null;
}
return $relations;
}
public function handleUsers(array $relations)
{
$users = $this->getUsers($relations);
foreach ($relations as $key => $value) {
$relations[$key]['user'] = $users[$value['user_id']] ?? null;
}
return $relations;
}
public function getQuestions(array $relations)
{
$ids = kg_array_column($relations, 'question_id');
$questionRepo = new QuestionRepo();
$columns = [
'id', 'title', 'cover',
'view_count', 'like_count',
'answer_count', 'favorite_count',
];
$questions = $questionRepo->findByIds($ids, $columns);
$baseUrl = kg_cos_url();
$result = [];
foreach ($questions->toArray() as $question) {
if (!empty($question['cover']) && !Text::startsWith($question['cover'], 'http')) {
$question['cover'] = $baseUrl . $question['cover'];
}
$result[$question['id']] = $question;
}
return $result;
}
public function getUsers(array $relations)
{
$ids = kg_array_column($relations, 'user_id');
return $this->getShallowUserByIds($ids);
}
}

View File

@ -0,0 +1,77 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Caches\CategoryAllList as CategoryAllListCache;
use App\Models\Category as CategoryModel;
class QuestionList extends Builder
{
public function handleQuestions(array $questions)
{
foreach ($questions as $key => $question) {
$questions[$key]['tags'] = json_decode($question['tags'], true);
}
return $questions;
}
public function handleCategories(array $questions)
{
$categories = $this->getCategories();
foreach ($questions as $key => $question) {
$questions[$key]['category'] = $categories[$question['category_id']] ?? null;
}
return $questions;
}
public function handleUsers(array $questions)
{
$users = $this->getUsers($questions);
foreach ($questions as $key => $question) {
$questions[$key]['owner'] = $users[$question['owner_id']] ?? null;
$questions[$key]['last_replier'] = $users[$question['last_replier_id']] ?? null;
}
return $questions;
}
public function getCategories()
{
$cache = new CategoryAllListCache();
$items = $cache->get(CategoryModel::TYPE_QUESTION);
if (empty($items)) return [];
$result = [];
foreach ($items as $item) {
$result[$item['id']] = [
'id' => $item['id'],
'name' => $item['name'],
];
}
return $result;
}
public function getUsers($questions)
{
$ownerIds = kg_array_column($questions, 'owner_id');
$lastReplierIds = kg_array_column($questions, 'last_replier_id');
$ids = array_merge($ownerIds, $lastReplierIds);
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,9 +1,14 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Models\Refund as RefundModel;
use App\Repos\Order as OrderRepo;
use App\Repos\User as UserRepo;
class RefundList extends Builder
{
@ -13,7 +18,7 @@ class RefundList extends Builder
$orders = $this->getOrders($trades);
foreach ($trades as $key => $trade) {
$trades[$key]['order'] = $orders[$trade['order_id']] ?? new \stdClass();
$trades[$key]['order'] = $orders[$trade['order_id']] ?? null;
}
return $trades;
@ -24,12 +29,30 @@ class RefundList extends Builder
$users = $this->getUsers($refunds);
foreach ($refunds as $key => $refund) {
$refunds[$key]['owner'] = $users[$refund['owner_id']] ?? new \stdClass();
$refunds[$key]['owner'] = $users[$refund['owner_id']] ?? null;
}
return $refunds;
}
public function handleMeInfo(array $refund)
{
$me = [
'allow_cancel' => 0,
];
$statusTypes = [
RefundModel::STATUS_PENDING,
RefundModel::STATUS_APPROVED,
];
if (in_array($refund['status'], $statusTypes)) {
$me['allow_cancel'] = 1;
}
return $me;
}
public function getOrders(array $trades)
{
$ids = kg_array_column($trades, 'order_id');
@ -51,17 +74,7 @@ class RefundList extends Builder
{
$ids = kg_array_column($refunds, 'owner_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name']);
$result = [];
foreach ($users->toArray() as $user) {
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -0,0 +1,31 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
class ReportList extends Builder
{
public function handleUsers(array $reports)
{
$users = $this->getUsers($reports);
foreach ($reports as $key => $report) {
$reports[$key]['owner'] = $users[$report['owner_id']] ?? null;
}
return $reports;
}
public function getUsers(array $reports)
{
$ids = kg_array_column($reports, 'owner_id');
return $this->getShallowUserByIds($ids);
}
}

View File

@ -0,0 +1,50 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Upload as UploadRepo;
class ResourceList extends Builder
{
public function handleUploads($relations)
{
$uploads = $this->getUploads($relations);
foreach ($relations as $key => $value) {
$relations[$key]['upload'] = $uploads[$value['upload_id']] ?? null;
}
return $relations;
}
public function getUploads($relations)
{
$ids = kg_array_column($relations, 'upload_id');
$uploadRepo = new UploadRepo();
$columns = ['id', 'name', 'path', 'mime', 'md5', 'size'];
$uploads = $uploadRepo->findByIds($ids, $columns);
$result = [];
foreach ($uploads->toArray() as $upload) {
$id = $this->crypt->encryptBase64($upload['id'], null, true);
$upload['url'] = $this->url->get(['for' => 'home.download', 'id' => $id]);
$result[$upload['id']] = $upload;
}
return $result;
}
}

View File

@ -1,9 +1,13 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
class ReviewList extends Builder
{
@ -13,7 +17,7 @@ class ReviewList extends Builder
$courses = $this->getCourses($reviews);
foreach ($reviews as $key => $review) {
$reviews[$key]['course'] = $courses[$review['course_id']] ?? new \stdClass();
$reviews[$key]['course'] = $courses[$review['course_id']] ?? null;
}
return $reviews;
@ -24,7 +28,7 @@ class ReviewList extends Builder
$users = $this->getUsers($reviews);
foreach ($reviews as $key => $review) {
$reviews[$key]['owner'] = $users[$review['owner_id']] ?? new \stdClass();
$reviews[$key]['owner'] = $users[$review['owner_id']] ?? null;
}
return $reviews;
@ -51,20 +55,7 @@ class ReviewList extends Builder
{
$ids = kg_array_column($reviews, 'owner_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']);
$baseUrl = kg_cos_url();
$result = [];
foreach ($users->toArray() as $user) {
$user['avatar'] = $baseUrl . $user['avatar'];
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -0,0 +1,66 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Tag as TagRepo;
class TagFollowList extends Builder
{
public function handleTags(array $relations)
{
$tags = $this->getTags($relations);
foreach ($relations as $key => $value) {
$relations[$key]['tag'] = $tags[$value['tag_id']] ?? null;
}
return $relations;
}
public function handleUsers(array $relations)
{
$users = $this->getUsers($relations);
foreach ($relations as $key => $value) {
$relations[$key]['user'] = $users[$value['user_id']] ?? null;
}
return $relations;
}
public function getTags(array $relations)
{
$ids = kg_array_column($relations, 'tag_id');
$tagRepo = new TagRepo();
$columns = ['id', 'name', 'alias', 'icon', 'follow_count'];
$tags = $tagRepo->findByIds($ids, $columns);
$baseUrl = kg_cos_url();
$result = [];
foreach ($tags->toArray() as $tag) {
$tag['icon'] = $baseUrl . $tag['icon'];
$result[$tag['id']] = $tag;
}
return $result;
}
public function getUsers(array $relations)
{
$ids = kg_array_column($relations, 'user_id');
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,9 +1,13 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Repos\Order as OrderRepo;
use App\Repos\User as UserRepo;
class TradeList extends Builder
{
@ -13,7 +17,7 @@ class TradeList extends Builder
$orders = $this->getOrders($trades);
foreach ($trades as $key => $trade) {
$trades[$key]['order'] = $orders[$trade['order_id']] ?? new \stdClass();
$trades[$key]['order'] = $orders[$trade['order_id']] ?? null;
}
return $trades;
@ -24,7 +28,7 @@ class TradeList extends Builder
$users = $this->getUsers($trades);
foreach ($trades as $key => $trade) {
$trades[$key]['owner'] = $users[$trade['owner_id']] ?? new \stdClass();
$trades[$key]['owner'] = $users[$trade['owner_id']] ?? null;
}
return $trades;
@ -51,17 +55,7 @@ class TradeList extends Builder
{
$ids = kg_array_column($trades, 'owner_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name']);
$result = [];
foreach ($users->toArray() as $user) {
$result[$user['id']] = $user;
}
return $result;
return $this->getShallowUserByIds($ids);
}
}

View File

@ -1,8 +1,14 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Builders;
use App\Models\User as UserModel;
use App\Repos\Account as AccountRepo;
use App\Repos\Role as RoleRepo;
class UserList extends Builder
@ -19,6 +25,17 @@ class UserList extends Builder
return $users;
}
public function handleAccounts(array $users)
{
$accounts = $this->getAccounts($users);
foreach ($users as $key => $user) {
$users[$key]['account'] = $accounts[$user['id']] ?? null;
}
return $users;
}
public function handleAdminRoles(array $users)
{
$roles = $this->getAdminRoles($users);
@ -41,6 +58,26 @@ class UserList extends Builder
return $users;
}
protected function getAccounts(array $users)
{
$ids = kg_array_column($users, 'id');
$accountRepo = new AccountRepo();
$accounts = $accountRepo->findByIds($ids);
$result = [];
foreach ($accounts as $account) {
$result[$account->id] = [
'phone' => $account->phone,
'email' => $account->email,
];
}
return $result;
}
protected function getAdminRoles(array $users)
{
$ids = kg_array_column($users, 'admin_role');

37
app/Caches/AppInfo.php Normal file
View File

@ -0,0 +1,37 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
class AppInfo extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "_APP_INFO_";
}
public function getContent($id = null)
{
$appInfo = new \App\Library\AppInfo();
return [
'name' => $appInfo->get('name'),
'alias' => $appInfo->get('alias'),
'link' => $appInfo->get('link'),
'version' => $appInfo->get('version'),
];
}
}

View File

@ -1,11 +1,16 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use Phalcon\Cache\Backend\Redis as RedisCache;
use Phalcon\Mvc\User\Component;
use Phalcon\Di\Injectable;
abstract class Cache extends Component
abstract class Cache extends Injectable
{
/**

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -0,0 +1,46 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Category as CategoryModel;
use Phalcon\Mvc\Model\Resultset;
class CategoryAllList extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "category_all_list:{$id}";
}
public function getContent($id = null)
{
/**
* @var Resultset $categories
*/
$categories = CategoryModel::query()
->columns(['id', 'parent_id', 'name', 'priority', 'level', 'path'])
->where('type = :type:', ['type' => $id])
->orderBy('level ASC, priority ASC')
->execute();
if ($categories->count() == 0) {
return [];
}
return $categories->toArray();
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -15,24 +20,22 @@ class CategoryList extends Cache
return $this->lifetime;
}
public function getKey($type = null)
public function getKey($id = null)
{
return "category_list:{$type}";
return "category_list:{$id}";
}
/**
* @param null $type
* @return array
*/
public function getContent($type = null)
public function getContent($id = null)
{
/**
* @var Resultset $categories
*/
$categories = CategoryModel::query()
->columns(['id', 'parent_id', 'name', 'priority', 'level', 'path'])
->where('type = :type:', ['type' => $type])
->where('type = :type:', ['type' => $id])
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('level ASC, priority ASC')
->execute();
if ($categories->count() == 0) {

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -14,16 +19,16 @@ class CategoryTreeList extends Cache
return $this->lifetime;
}
public function getKey($type = null)
public function getKey($id = null)
{
return "category_tree_list:{$type}";
return "category_tree_list:{$id}";
}
public function getContent($type = null)
public function getContent($id = null)
{
$builder = new CategoryTreeListBuilder();
$list = $builder->handle($type);
$list = $builder->handle($id);
return $list ?: [];
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -7,7 +12,7 @@ use App\Repos\Chapter as ChapterRepo;
class Chapter extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 86400;
public function getLifetime()
{

View File

@ -1,11 +1,17 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Library\Cache\Backend\Redis as RedisCache;
use Phalcon\Mvc\User\Component;
use Phalcon\Di\Injectable;
use Redis;
abstract class Counter extends Component
abstract class Counter extends Injectable
{
/**
@ -14,7 +20,7 @@ abstract class Counter extends Component
protected $cache;
/**
* @var \Redis
* @var Redis
*/
protected $redis;
@ -25,19 +31,13 @@ abstract class Counter extends Component
$this->redis = $this->cache->getRedis();
}
/**
* 获取缓存内容
*
* @param mixed $id
* @return array
*/
public function get($id = null)
{
$key = $this->getKey($id);
$content = $this->redis->hGetAll($key);
if (!$this->cache->exists($key)) {
if (!$this->redis->exists($key)) {
$content = $this->getContent($id);
$lifetime = $this->getLifetime();
@ -49,23 +49,13 @@ abstract class Counter extends Component
return $content;
}
/**
* 删除缓存内容
*
* @param mixed $id
*/
public function delete($id = null)
{
$key = $this->getKey($id);
$this->cache->delete($key);
$this->redis->del($key);
}
/**
* 重建缓存内容
*
* @param mixed $id
*/
public function rebuild($id = null)
{
$this->delete($id);

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -7,7 +12,7 @@ use App\Repos\Course as CourseRepo;
class Course extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 86400;
public function getLifetime()
{

View File

@ -1,54 +0,0 @@
<?php
namespace App\Caches;
use App\Models\Category as CategoryModel;
use App\Repos\Course as CourseRepo;
class CourseCategoryList extends Cache
{
protected $lifetime = 1 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "course_category_list:{$id}";
}
public function getContent($id = null)
{
$courseRepo = new CourseRepo();
$categories = $courseRepo->findCategories($id);
if ($categories->count() == 0) {
return [];
}
return $this->handleContent($categories);
}
/**
* @param CategoryModel[] $categories
* @return array
*/
public function handleContent($categories)
{
$result = [];
foreach ($categories as $category) {
$result[] = [
'id' => $category->id,
'name' => $category->name,
];
}
return $result;
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -8,7 +13,7 @@ use App\Repos\Course as CourseRepo;
class CoursePackageList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 86400;
public function getLifetime()
{

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -8,7 +13,7 @@ use App\Repos\Course as CourseRepo;
class CourseRelatedList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 86400;
public function getLifetime()
{
@ -43,16 +48,25 @@ class CourseRelatedList extends Cache
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$result[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}

View File

@ -1,57 +0,0 @@
<?php
namespace App\Caches;
use App\Models\User as UserModel;
use App\Repos\Course as CourseRepo;
class CourseTeacherList extends Cache
{
protected $lifetime = 1 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "course_teacher_list:{$id}";
}
public function getContent($id = null)
{
$courseRepo = new CourseRepo();
$users = $courseRepo->findTeachers($id);
if ($users->count() == 0) {
return [];
}
return $this->handleContent($users);
}
/**
* @param UserModel[] $users
* @return array
*/
public function handleContent($users)
{
$result = [];
foreach ($users as $user) {
$result[] = [
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
'title' => $user->title,
'about' => $user->about,
];
}
return $result;
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -9,7 +14,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class CourseTopicList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 86400;
public function getLifetime()
{
@ -59,6 +64,7 @@ class CourseTopicList extends Cache
{
return TopicModel::query()
->where('published = 1')
->andWhere('deleted = 0')
->orderBy('RAND()')
->limit($limit)
->execute();

View File

@ -0,0 +1,71 @@
<?php
/**
* @copyright Copyright (c) 2023 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Article as ArticleModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class FeaturedArticleList extends Cache
{
protected $lifetime = 3600;
protected $limit = 5;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'featured_article_list';
}
public function getContent($id = null)
{
$articles = $this->findArticles($this->limit);
if ($articles->count() == 0) {
return [];
}
$result = [];
foreach ($articles as $article) {
$result[] = [
'id' => $article->id,
'title' => $article->title,
'cover' => $article->cover,
'favorite_count' => $article->favorite_count,
'comment_count' => $article->comment_count,
'view_count' => $article->view_count,
'like_count' => $article->like_count,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|ArticleModel[]
*/
protected function findArticles($limit = 5)
{
return ArticleModel::query()
->where('featured = 1')
->andWhere('published = :published:', ['published' => ArticleModel::PUBLISH_APPROVED])
->andWhere('deleted = 0')
->orderBy('RAND()')
->limit($limit)
->execute();
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2023 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -6,10 +11,12 @@ use App\Models\Course as CourseModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class CourseRecommendedList extends Cache
class FeaturedCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
protected $limit = 5;
public function getLifetime()
{
@ -18,40 +25,40 @@ class CourseRecommendedList extends Cache
public function getKey($id = null)
{
return "course_recommended_list:{$id}";
return 'featured_course_list';
}
public function getContent($id = null)
{
$courses = $this->findCourses(5);
$courses = $this->findCourses($this->limit);
if ($courses->count() == 0) {
return [];
}
return $this->handleContent($courses);
}
/**
* @param CourseModel[] $courses
* @return array
*/
public function handleContent($courses)
{
$result = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$result[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
@ -62,10 +69,12 @@ class CourseRecommendedList extends Cache
* @param int $limit
* @return ResultsetInterface|Resultset|CourseModel[]
*/
public function findCourses($limit = 5)
protected function findCourses($limit = 5)
{
return CourseModel::query()
->where('published = 1 AND market_price > 0')
->where('featured = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('RAND()')
->limit($limit)
->execute();

View File

@ -0,0 +1,72 @@
<?php
/**
* @copyright Copyright (c) 2023 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Question as QuestionModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class FeaturedQuestionList extends Cache
{
protected $lifetime = 3600;
protected $limit = 5;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'featured_question_list';
}
public function getContent($id = null)
{
$questions = $this->findQuestions($this->limit);
if ($questions->count() == 0) {
return [];
}
$result = [];
foreach ($questions as $question) {
$result[] = [
'id' => $question->id,
'title' => $question->title,
'cover' => $question->cover,
'favorite_count' => $question->favorite_count,
'answer_count' => $question->answer_count,
'view_count' => $question->view_count,
'like_count' => $question->like_count,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|QuestionModel[]
*/
protected function findQuestions($limit = 5)
{
return QuestionModel::query()
->where('featured = 1')
->andWhere('published = :published:', ['published' => QuestionModel::PUBLISH_APPROVED])
->andWhere('deleted = 0')
->orderBy('RAND()')
->limit($limit)
->execute();
}
}

View File

@ -1,31 +0,0 @@
<?php
namespace App\Caches;
use App\Repos\Help as HelpRepo;
class Help extends Cache
{
protected $lifetime = 7 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "help:{$id}";
}
public function getContent($id = null)
{
$helpRepo = new HelpRepo();
$help = $helpRepo->findById($id);
return $help ?: null;
}
}

View File

@ -1,89 +0,0 @@
<?php
namespace App\Caches;
use App\Models\Category as CategoryModel;
use App\Models\Help as HelpModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class HelpList extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'help_list';
}
public function getContent($id = null)
{
$categories = $this->findCategories();
if ($categories->count() == 0) {
return [];
}
$result = [];
foreach ($categories as $category) {
$item = [];
$item['category'] = [
'id' => $category->id,
'name' => $category->name,
];
$item['helps'] = [];
$helps = $this->findHelps($category->id);
if ($helps->count() > 0) {
foreach ($helps as $help) {
$item['helps'][] = [
'id' => $help->id,
'title' => $help->title,
];
}
}
$result[] = $item;
}
return $result;
}
/**
* @return ResultsetInterface|Resultset|CategoryModel[]
*/
protected function findCategories()
{
return CategoryModel::query()
->where('type = :type:', ['type' => CategoryModel::TYPE_HELP])
->andWhere('level = 1 AND published = 1')
->orderBy('priority ASC')
->execute();
}
/**
* @param int $categoryId
* @return ResultsetInterface|Resultset|CategoryModel[]
*/
protected function findHelps($categoryId)
{
return HelpModel::query()
->where('category_id = :category_id:', ['category_id' => $categoryId])
->andWhere('published = 1')
->orderBy('priority ASC')
->execute();
}
}

View File

@ -0,0 +1,136 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Question as QuestionModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class HotQuestionList extends Cache
{
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'hot_question_list';
}
public function getContent($id = null)
{
$questions = $this->findWeeklyHotQuestions();
if ($questions->count() > 0) {
return $this->handleQuestions($questions);
}
$questions = $this->findMonthlyHotQuestions();
if ($questions->count() > 0) {
return $this->handleQuestions($questions);
}
$questions = $this->findYearlyHotQuestions();
if ($questions->count() > 0) {
return $this->handleQuestions($questions);
}
$questions = $this->findFullyHotQuestions();
if ($questions->count() > 0) {
return $this->handleQuestions($questions);
}
return [];
}
/**
* @param QuestionModel[] $questions
* @return array
*/
protected function handleQuestions($questions)
{
$result = [];
foreach ($questions as $question) {
$result[] = [
'id' => $question->id,
'title' => $question->title,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|QuestionModel[]
*/
protected function findWeeklyHotQuestions($limit = 10)
{
$createTime = strtotime('monday this week');
return $this->findHotQuestions($createTime, $limit);
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|QuestionModel[]
*/
protected function findMonthlyHotQuestions($limit = 10)
{
$createTime = strtotime(date('Y-m-01'));
return $this->findHotQuestions($createTime, $limit);
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|QuestionModel[]
*/
protected function findYearlyHotQuestions($limit = 10)
{
$createTime = strtotime(date('Y-01-01'));
return $this->findHotQuestions($createTime, $limit);
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|QuestionModel[]
*/
protected function findFullyHotQuestions($limit = 10)
{
$createTime = 0;
return $this->findHotQuestions($createTime, $limit);
}
/**
* @param int $createTime
* @param int $limit
* @return ResultsetInterface|Resultset|QuestionModel[]
*/
protected function findHotQuestions($createTime, $limit = 10)
{
return QuestionModel::query()
->where('create_time > :create_time:', ['create_time' => $createTime])
->andWhere('published = :published:', ['published' => QuestionModel::PUBLISH_APPROVED])
->andWhere('deleted = 0')
->orderBy('score DESC')
->limit($limit)
->execute();
}
}

View File

@ -1,85 +0,0 @@
<?php
namespace App\Caches;
use App\Models\ImMessage;
use App\Models\ImMessage as ImMessageModel;
use App\Models\User as UserModel;
use App\Repos\ImGroup as ImGroupRepo;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class ImActiveGroupList extends Cache
{
protected $lifetime = 1 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'im_active_group_list';
}
public function getContent($id = null)
{
$groups = $this->findGroups();
if (empty($groups)) {
return [];
}
$result = [];
foreach ($groups as $group) {
$result[] = [
'id' => $group->id,
'type' => $group->type,
'name' => $group->name,
'avatar' => $group->avatar,
'about' => $group->about,
'user_count' => $group->user_count,
'msg_count' => $group->msg_count,
];
}
return $result;
}
/**
* @param int $days
* @param int $limit
* @return ResultsetInterface|Resultset|UserModel[]
*/
protected function findGroups($days = 7, $limit = 12)
{
$result = [];
$startTime = strtotime("-{$days} days");
$endTime = time();
$rows = ImMessageModel::query()
->columns(['receiver_id', 'total_count' => 'count(receiver_id)'])
->groupBy('receiver_id')
->orderBy('total_count DESC')
->where('receiver_type = :type:', ['type' => ImMessageModel::TYPE_GROUP])
->betweenWhere('create_time', $startTime, $endTime)
->limit($limit)
->execute();
if ($rows->count() > 0) {
$ids = kg_array_column($rows->toArray(), 'receiver_id');
$groupRepo = new ImGroupRepo();
$result = $groupRepo->findByIds($ids);
}
return $result;
}
}

View File

@ -1,82 +0,0 @@
<?php
namespace App\Caches;
use App\Models\ImMessage as ImMessageModel;
use App\Models\User as UserModel;
use App\Repos\User as UserRepo;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class ImActiveUserList extends Cache
{
protected $lifetime = 1 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'im_active_user_list';
}
public function getContent($id = null)
{
$users = $this->findUsers($id);
if (empty($users)) {
return [];
}
$result = [];
foreach ($users as $user) {
$result[] = [
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
'title' => $user->title,
'about' => $user->about,
'vip' => $user->vip,
];
}
return $result;
}
/**
* @param int $days
* @param int $limit
* @return ResultsetInterface|Resultset|UserModel[]
*/
protected function findUsers($days = 7, $limit = 12)
{
$result = [];
$startTime = strtotime("-{$days} days");
$endTime = time();
$rows = ImMessageModel::query()
->columns(['sender_id', 'total_count' => 'count(sender_id)'])
->groupBy('sender_id')
->orderBy('total_count DESC')
->betweenWhere('create_time', $startTime, $endTime)
->limit($limit)
->execute();
if ($rows->count() > 0) {
$ids = kg_array_column($rows->toArray(), 'sender_id');
$userRepo = new UserRepo();
$result = $userRepo->findByIds($ids);
}
return $result;
}
}

View File

@ -1,31 +0,0 @@
<?php
namespace App\Caches;
use App\Repos\ImGroup as ImGroupRepo;
class ImGroup extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "im_group:{$id}";
}
public function getContent($id = null)
{
$groupRepo = new ImGroupRepo();
$group = $groupRepo->findById($id);
return $group ?: null;
}
}

View File

@ -1,85 +0,0 @@
<?php
namespace App\Caches;
use App\Models\ImMessage as ImMessageModel;
use App\Models\User as UserModel;
use App\Repos\User as UserRepo;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class ImGroupActiveUserList extends Cache
{
protected $lifetime = 1 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "im_group_active_user_list:{$id}";
}
public function getContent($id = null)
{
$users = $this->findUsers($id);
if (empty($users)) {
return [];
}
$result = [];
foreach ($users as $user) {
$result[] = [
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
'title' => $user->title,
'about' => $user->about,
'vip' => $user->vip,
];
}
return $result;
}
/**
* @param int $groupId
* @param int $days
* @param int $limit
* @return ResultsetInterface|Resultset|UserModel[]
*/
protected function findUsers($groupId, $days = 7, $limit = 5)
{
$result = [];
$startTime = strtotime("-{$days} days");
$endTime = time();
$rows = ImMessageModel::query()
->columns(['sender_id', 'total_count' => 'count(sender_id)'])
->groupBy('sender_id')
->orderBy('total_count DESC')
->where('receiver_id = :group_id:', ['group_id' => $groupId])
->andWhere('receiver_type = :type:', ['type' => ImMessageModel::TYPE_GROUP])
->betweenWhere('create_time', $startTime, $endTime)
->limit($limit)
->execute();
if ($rows->count() > 0) {
$ids = kg_array_column($rows->toArray(), 'sender_id');
$userRepo = new UserRepo();
$result = $userRepo->findByIds($ids);
}
return $result;
}
}

View File

@ -1,73 +0,0 @@
<?php
namespace App\Caches;
use App\Models\ImGroup as ImGroupModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class ImNewGroupList extends Cache
{
protected $lifetime = 1 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'im_new_group_list';
}
public function getContent($id = null)
{
$limit = 12;
$groups = $this->findGroups($limit);
if ($groups->count() == 0) {
return [];
}
return $this->handleContent($groups);
}
/**
* @param ImGroupModel[] $groups
* @return array
*/
protected function handleContent($groups)
{
$result = [];
foreach ($groups as $group) {
$result[] = [
'id' => $group->id,
'type' => $group->type,
'name' => $group->name,
'avatar' => $group->avatar,
'about' => $group->about,
'user_count' => $group->user_count,
'msg_count' => $group->msg_count,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|ImGroupModel[]
*/
public function findGroups($limit = 12)
{
return ImGroupModel::query()
->where('published = 1')
->orderBy('id DESC')
->limit($limit)
->execute();
}
}

View File

@ -1,72 +0,0 @@
<?php
namespace App\Caches;
use App\Models\User as UserModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class ImNewUserList extends Cache
{
protected $lifetime = 1 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'im_new_user_list';
}
public function getContent($id = null)
{
$limit = 12;
$users = $this->findUsers($limit);
if ($users->count() == 0) {
return [];
}
return $this->handleContent($users);
}
/**
* @param UserModel[] $users
* @return array
*/
protected function handleContent($users)
{
$result = [];
foreach ($users as $user) {
$result[] = [
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
'title' => $user->title,
'about' => $user->about,
'vip' => $user->vip,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|UserModel[]
*/
public function findUsers($limit = 12)
{
return UserModel::query()
->where('deleted = 0')
->orderBy('id DESC')
->limit($limit)
->execute();
}
}

View File

@ -0,0 +1,48 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Article as ArticleModel;
use App\Repos\Article as ArticleRepo;
use App\Services\Logic\Article\ArticleList as ArticleListService;
class IndexArticleList extends Cache
{
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'index_article_list';
}
public function getContent($id = null)
{
$articleRepo = new ArticleRepo();
$where = [
'published' => ArticleModel::PUBLISH_APPROVED,
'private' => 0,
'deleted' => 0,
];
$pager = $articleRepo->paginate($where, 'latest', 1, 10);
$service = new ArticleListService();
$pager = $service->handleArticles($pager);
return $pager->items ?: [];
}
}

View File

@ -0,0 +1,136 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Category as CategoryModel;
use App\Models\Course as CourseModel;
use App\Services\Category as CategoryService;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
/**
* 推荐课程
*/
class IndexFeaturedCourseList extends Cache
{
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'index_featured_course_list';
}
public function getContent($id = null)
{
$categoryLimit = 5;
$courseLimit = 8;
$categories = $this->findCategories($categoryLimit);
if ($categories->count() == 0) {
return [];
}
$result = [];
foreach ($categories as $category) {
$item = [];
$item['category'] = [
'id' => $category->id,
'name' => $category->name,
];
$item['courses'] = [];
$courses = $this->findCategoryCourses($category->id, $courseLimit);
if ($courses->count() == 0) {
continue;
}
$categoryCourses = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$categoryCourses[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'model' => $course->model,
'level' => $course->level,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
$item['courses'] = $categoryCourses;
$result[] = $item;
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|CategoryModel[]
*/
protected function findCategories($limit = 5)
{
return CategoryModel::query()
->where('type = :type:', ['type' => CategoryModel::TYPE_COURSE])
->andWhere('level = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('priority ASC')
->limit($limit)
->execute();
}
/**
* @param int $categoryId
* @param int $limit
* @return ResultsetInterface|Resultset|CourseModel[]
*/
protected function findCategoryCourses($categoryId, $limit = 8)
{
$categoryService = new CategoryService();
$categoryIds = $categoryService->getChildCategoryIds($categoryId);
return CourseModel::query()
->inWhere('category_id', $categoryIds)
->andWhere('featured = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('id DESC')
->limit($limit)
->execute();
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -14,7 +19,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class IndexFreeCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -60,16 +65,26 @@ class IndexFreeCourseList extends Cache
$categoryCourses = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$categoryCourses[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
@ -89,7 +104,9 @@ class IndexFreeCourseList extends Cache
{
return CategoryModel::query()
->where('type = :type:', ['type' => CategoryModel::TYPE_COURSE])
->andWhere('level = 1 AND published = 1')
->andWhere('level = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('priority ASC')
->limit($limit)
->execute();
@ -108,8 +125,9 @@ class IndexFreeCourseList extends Cache
return CourseModel::query()
->inWhere('category_id', $categoryIds)
->andWhere('published = 1')
->andWhere('market_price = 0')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('score DESC')
->limit($limit)
->execute();

View File

@ -1,19 +1,24 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Chapter as ChapterModel;
use App\Models\ChapterLive as ChapterLiveModel;
use App\Repos\Chapter as ChapterRepo;
use App\Repos\Course as CourseRepo;
use App\Repos\User as UserRepo;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
/**
* 直播课程
*/
class IndexLiveList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -27,32 +32,11 @@ class IndexLiveList extends Cache
public function getContent($id = null)
{
/**
* 限制输出多少天数(一维限额)
*/
$dayLimit = 3;
$limit = 8;
/**
* 限制每天维度下的输出数(二维限额)
*/
$perDayLimit = 10;
$lives = $this->findChapterLives();
$beginTime = strtotime('today');
$endTime = strtotime("+30 days");
/**
* @var Resultset|ChapterLiveModel[] $lives
*/
$lives = ChapterLiveModel::query()
->betweenWhere('start_time', $beginTime, $endTime)
->orderBy('start_time ASC')
->execute();
if ($lives->count() == 0) {
return [];
}
$result = [];
if ($lives->count() == 0) return [];
$chapterIds = kg_array_column($lives->toArray(), 'chapter_id');
@ -72,53 +56,87 @@ class IndexLiveList extends Cache
$courses = $courseRepo->findByIds($courseIds);
$teacherIds = kg_array_column($courses->toArray(), 'teacher_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($teacherIds);
$courseMapping = [];
foreach ($courses as $course) {
$courseMapping[$course->id] = $course;
}
$userMapping = [];
foreach ($users as $user) {
$userMapping[$user->id] = $user;
}
$result = [];
$flag = [];
foreach ($lives as $live) {
if (count($result) >= $dayLimit) {
break;
}
$day = date('y-m-d', $live->start_time);
if (isset($result[$day]) && count($result[$day]) >= $perDayLimit) {
continue;
}
$chapter = $chapterMapping[$live->chapter_id];
$course = $courseMapping[$chapter->course_id];
$teacher = $userMapping[$course->teacher_id];
$teacherInfo = [
'id' => $teacher->id,
'name' => $teacher->name,
'title' => $teacher->title,
'avatar' => $teacher->avatar,
];
$chapterInfo = [
'id' => $chapter->id,
'title' => $chapter->title,
'start_time' => $live->start_time,
'end_time' => $live->end_time,
];
$courseInfo = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'lesson_count' => $course->lesson_count,
'teacher' => $teacherInfo,
];
$result[$day][] = [
'course' => $courseInfo,
'chapter' => $chapterInfo,
];
if (!isset($flag[$course->id]) && count($flag) < $limit) {
$flag[$course->id] = 1;
$result[] = [
'id' => $live->id,
'status' => $live->status,
'start_time' => $live->start_time,
'end_time' => $live->end_time,
'course' => $courseInfo,
'chapter' => $chapterInfo,
];
}
}
return $result;
}
/**
* @return ResultsetInterface|Resultset|ChapterLiveModel[]
*/
protected function findChapterLives()
{
$startTime = strtotime('today');
$endTime = strtotime('+30 days');
return $this->modelsManager->createBuilder()
->columns('cl.*')
->addFrom(ChapterLiveModel::class, 'cl')
->join(ChapterModel::class, 'cl.chapter_id = c.id', 'c')
->betweenWhere('start_time', $startTime, $endTime)
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('start_time ASC')
->getQuery()
->execute();
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -14,7 +19,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class IndexNewCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -60,16 +65,26 @@ class IndexNewCourseList extends Cache
$categoryCourses = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$categoryCourses[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
@ -89,7 +104,9 @@ class IndexNewCourseList extends Cache
{
return CategoryModel::query()
->where('type = :type:', ['type' => CategoryModel::TYPE_COURSE])
->andWhere('level = 1 AND published = 1')
->andWhere('level = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('priority ASC')
->limit($limit)
->execute();
@ -109,6 +126,7 @@ class IndexNewCourseList extends Cache
return CourseModel::query()
->inWhere('category_id', $categoryIds)
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('id DESC')
->limit($limit)
->execute();

View File

@ -0,0 +1,47 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Question as QuestionModel;
use App\Repos\Question as QuestionRepo;
use App\Services\Logic\Question\QuestionList as QuestionListService;
class IndexQuestionList extends Cache
{
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'index_question_list';
}
public function getContent($id = null)
{
$questionRepo = new QuestionRepo();
$where = [
'published' => QuestionModel::PUBLISH_APPROVED,
'deleted' => 0,
];
$pager = $questionRepo->paginate($where, 'latest', 1, 10);
$service = new QuestionListService();
$pager = $service->handleQuestions($pager);
return $pager->items ?: [];
}
}

View File

@ -0,0 +1,86 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Course as CourseModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
/**
* 简版推荐课程
*/
class IndexSimpleFeaturedCourseList extends Cache
{
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'index_simple_featured_course_list';
}
public function getContent($id = null)
{
$limit = 8;
$courses = $this->findCourses($limit);
if ($courses->count() == 0) {
return [];
}
$result = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$result[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'model' => $course->model,
'level' => $course->level,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|CourseModel[]
*/
protected function findCourses($limit = 8)
{
return CourseModel::query()
->where('featured = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('id DESC')
->limit($limit)
->execute();
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -12,7 +17,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class IndexSimpleFreeCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -37,16 +42,26 @@ class IndexSimpleFreeCourseList extends Cache
$result = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$result[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
@ -60,8 +75,9 @@ class IndexSimpleFreeCourseList extends Cache
protected function findCourses($limit = 8)
{
return CourseModel::query()
->where('published = 1')
->andWhere('market_price = 0')
->where('market_price = 0')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('score DESC')
->limit($limit)
->execute();

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -12,7 +17,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class IndexSimpleNewCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -37,16 +42,26 @@ class IndexSimpleNewCourseList extends Cache
$result = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$result[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
@ -61,6 +76,7 @@ class IndexSimpleNewCourseList extends Cache
{
return CourseModel::query()
->where('published = 1')
->andWhere('deleted = 0')
->orderBy('id DESC')
->limit($limit)
->execute();

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -12,7 +17,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class IndexSimpleVipCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -37,16 +42,26 @@ class IndexSimpleVipCourseList extends Cache
$result = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$result[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
@ -60,8 +75,10 @@ class IndexSimpleVipCourseList extends Cache
protected function findCourses($limit = 8)
{
return CourseModel::query()
->where('published = 1')
->where('market_price > vip_price')
->andWhere('vip_price >= 0')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('score DESC')
->limit($limit)
->execute();

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -9,7 +14,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class IndexSlideList extends Cache
{
protected $lifetime = 365 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -63,6 +68,7 @@ class IndexSlideList extends Cache
{
return SlideModel::query()
->where('published = 1')
->andWhere('deleted = 0')
->orderBy('priority ASC')
->limit($limit)
->execute();

View File

@ -0,0 +1,69 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\User as UserModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class IndexTeacherList extends Cache
{
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'index_teacher_list';
}
public function getContent($id = null)
{
$teachers = $this->findTeachers();
if ($teachers->count() == 0) return [];
$result = [];
$baseUrl = kg_cos_url();
foreach ($teachers->toArray() as $teacher) {
$teacher['avatar'] = $baseUrl . $teacher['avatar'];
$result[] = [
'id' => $teacher['id'],
'name' => $teacher['name'],
'title' => $teacher['title'],
'avatar' => $teacher['avatar'],
'about' => $teacher['about'],
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|UserModel[]
*/
protected function findTeachers($limit = 8)
{
return UserModel::query()
->where('edu_role = :edu_role:', ['edu_role' => UserModel::EDU_ROLE_TEACHER])
->andWhere('deleted = 0')
->orderBy('RAND()')
->limit($limit)
->execute();
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -14,7 +19,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
class IndexVipCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 3600;
public function getLifetime()
{
@ -60,16 +65,26 @@ class IndexVipCourseList extends Cache
$categoryCourses = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$categoryCourses[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}
@ -89,7 +104,9 @@ class IndexVipCourseList extends Cache
{
return CategoryModel::query()
->where('type = :type:', ['type' => CategoryModel::TYPE_COURSE])
->andWhere('level = 1 AND published = 1')
->andWhere('level = 1')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('priority ASC')
->limit($limit)
->execute();
@ -108,8 +125,10 @@ class IndexVipCourseList extends Cache
return CourseModel::query()
->inWhere('category_id', $categoryIds)
->andWhere('published = 1')
->andWhere('market_price > vip_price')
->andWhere('vip_price >= 0')
->andWhere('published = 1')
->andWhere('deleted = 0')
->orderBy('score DESC')
->limit($limit)
->execute();

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,29 +0,0 @@
<?php
namespace App\Caches;
use App\Models\Help as HelpModel;
class MaxHelpId extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'max_help_id';
}
public function getContent($id = null)
{
$help = HelpModel::findFirst(['order' => 'id DESC']);
return $help->id ?? 0;
}
}

View File

@ -1,29 +0,0 @@
<?php
namespace App\Caches;
use App\Models\ImGroup as ImGroupModel;
class MaxImGroupId extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'max_im_group_id';
}
public function getContent($id = null)
{
$group = ImGroupModel::findFirst(['order' => 'id DESC']);
return $group->id ?? 0;
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,29 +0,0 @@
<?php
namespace App\Caches;
use App\Models\Page as PageModel;
class MaxPageId extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'max_page_id';
}
public function getContent($id = null)
{
$page = PageModel::findFirst(['order' => 'id DESC']);
return $page->id ?? 0;
}
}

34
app/Caches/MaxTagId.php Normal file
View File

@ -0,0 +1,34 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Tag as TagModel;
class MaxTagId extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'max_tag_id';
}
public function getContent($id = null)
{
$tag = TagModel::findFirst(['order' => 'id DESC']);
return $tag->id ?? 0;
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
@ -8,7 +13,7 @@ use App\Repos\Package as PackageRepo;
class PackageCourseList extends Cache
{
protected $lifetime = 1 * 86400;
protected $lifetime = 86400;
public function getLifetime()
{
@ -42,16 +47,26 @@ class PackageCourseList extends Cache
$result = [];
foreach ($courses as $course) {
$userCount = $course->user_count;
if ($course->fake_user_count > $course->user_count) {
$userCount = $course->fake_user_count;
}
$result[] = [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'model' => $course->model,
'level' => $course->level,
'user_count' => $course->user_count,
'rating' => round($course->rating, 1),
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'user_count' => $userCount,
'lesson_count' => $course->lesson_count,
'review_count' => $course->review_count,
'favorite_count' => $course->favorite_count,
];
}

View File

@ -1,31 +0,0 @@
<?php
namespace App\Caches;
use App\Repos\Page as PageRepo;
class Page extends Cache
{
protected $lifetime = 7 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "page:{$id}";
}
public function getContent($id = null)
{
$pageRepo = new PageRepo();
$page = $pageRepo->findById($id);
return $page ?: null;
}
}

View File

@ -0,0 +1,85 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\PointGift as PointGiftModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class PointHotGiftList extends Cache
{
/**
* 过期时间
*
* @var int
*/
protected $lifetime = 86400;
/**
* 显示个数
*
* @var int
*/
protected $limit = 5;
public function setLimit($limit)
{
$this->limit = $limit;
}
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'point_hot_gift_list';
}
public function getContent($id = null)
{
$gifts = $this->findGifts($this->limit);
if (count($gifts) == 0) {
return [];
}
$result = [];
foreach ($gifts as $gift) {
$result[] = [
'id' => $gift->id,
'name' => $gift->name,
'cover' => $gift->cover,
'details' => $gift->details,
'type' => $gift->type,
'point' => $gift->point,
'redeem_count' => $gift->redeem_count,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset|PointGiftModel[]
*/
protected function findGifts($limit = 5)
{
return PointGiftModel::query()
->where('published = 1')
->andWhere('deleted = 0')
->orderBy('redeem_count DESC')
->limit($limit)
->execute();
}
}

View File

@ -1,65 +0,0 @@
<?php
namespace App\Caches;
use App\Models\Order as OrderModel;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class SaleTrend extends Cache
{
protected $lifetime = 2 * 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'sale_trend';
}
public function getContent($id = null)
{
}
/**
* @param OrderModel[] $sales
* @param int $days
* @return array
*/
protected function handleSales($sales, $days = 7)
{
$result = [];
foreach (array_reverse(range(1, $days)) as $num) {
$date = date('Y-m-d', strtotime("-{$num} days"));
$result[$date] = 0;
}
foreach ($sales as $sale) {
$date = date('Y-m-d', $sale->create_time);
$result[$date] += $sale->amount;
}
return $result;
}
/**
* @param int $days
* @return ResultsetInterface|Resultset|OrderModel[]
*/
protected function findSales($days = 7)
{
$time = strtotime("-{$days} days");
return OrderModel::query()
->where('status = :status:', ['status' => OrderModel::STATUS_FINISHED])
->andWhere('create_time > :time:', ['time' => $time])
->execute();
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;

View File

@ -1,12 +1,19 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Repos\Answer as AnswerRepo;
use App\Repos\Article as ArticleRepo;
use App\Repos\Comment as CommentRepo;
use App\Repos\Consult as ConsultRepo;
use App\Repos\Course as CourseRepo;
use App\Repos\ImGroup as GroupRepo;
use App\Repos\Order as OrderRepo;
use App\Repos\Package as PackageRepo;
use App\Repos\Question as QuestionRepo;
use App\Repos\Review as ReviewRepo;
use App\Repos\Topic as TopicRepo;
use App\Repos\User as UserRepo;
@ -14,7 +21,7 @@ use App\Repos\User as UserRepo;
class SiteGlobalStat extends Cache
{
protected $lifetime = 2 * 3600;
protected $lifetime = 15 * 60;
public function getLifetime()
{
@ -29,9 +36,11 @@ class SiteGlobalStat extends Cache
public function getContent($id = null)
{
$courseRepo = new CourseRepo();
$articleRepo = new ArticleRepo();
$questionRepo = new QuestionRepo();
$answerRepo = new AnswerRepo();
$commentRepo = new CommentRepo();
$consultRepo = new ConsultRepo();
$groupRepo = new GroupRepo();
$orderRepo = new OrderRepo();
$packageRepo = new PackageRepo();
$reviewRepo = new ReviewRepo();
$topicRepo = new TopicRepo();
@ -39,9 +48,12 @@ class SiteGlobalStat extends Cache
return [
'course_count' => $courseRepo->countCourses(),
'article_count' => $articleRepo->countArticles(),
'question_count' => $questionRepo->countQuestions(),
'answer_count' => $answerRepo->countAnswers(),
'comment_count' => $commentRepo->countComments(),
'consult_count' => $consultRepo->countConsults(),
'group_count' => $groupRepo->countGroups(),
'order_count' => $orderRepo->countOrders(),
'vip_count' => $userRepo->countVipUsers(),
'package_count' => $packageRepo->countPackages(),
'review_count' => $reviewRepo->countReviews(),
'topic_count' => $topicRepo->countTopics(),

View File

@ -1,14 +1,18 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Order as OrderModel;
use App\Models\User as UserModel;
use App\Repos\Stat as StatRepo;
class SiteTodayStat extends Cache
{
protected $lifetime = 1 * 3600;
protected $lifetime = 15 * 60;
public function getLifetime()
{
@ -22,42 +26,25 @@ class SiteTodayStat extends Cache
public function getContent($id = null)
{
$statRepo = new StatRepo();
$date = date('Y-m-d');
$saleCount = $statRepo->countDailySales($date);
$refundCount = $statRepo->countDailyRefunds($date);
$saleAmount = $statRepo->sumDailySales($date);
$refundAmount = $statRepo->sumDailyRefunds($date);
$registerCount = $statRepo->countDailyRegisteredUsers($date);
$pointRedeemCount = $statRepo->countDailyPointGiftRedeems($date);
return [
'user_count' => $this->countUsers(),
'order_count' => $this->countOrders(),
'sale_amount' => $this->sumSales(),
'sale_count' => $saleCount,
'refund_count' => $refundCount,
'sale_amount' => $saleAmount,
'refund_amount' => $refundAmount,
'register_count' => $registerCount,
'point_redeem_count' => $pointRedeemCount,
];
}
protected function countUsers()
{
return (int)UserModel::count([
'conditions' => 'create_time > :time:',
'bind' => ['time' => strtotime('today')],
]);
}
protected function countOrders()
{
return (int)OrderModel::count([
'conditions' => 'create_time > :time: AND status = :status:',
'bind' => [
'time' => strtotime('today'),
'status' => OrderModel::STATUS_FINISHED,
],
]);
}
protected function sumSales()
{
return (float)OrderModel::sum([
'column' => 'amount',
'conditions' => 'create_time > :time: AND status = :status:',
'bind' => [
'time' => strtotime('today'),
'status' => OrderModel::STATUS_FINISHED,
],
]);
}
}

36
app/Caches/Tag.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Repos\Tag as TagRepo;
class Tag extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "tag:{$id}";
}
public function getContent($id = null)
{
$tagRepo = new TagRepo();
$tag = $tagRepo->findById($id);
return $tag ?: null;
}
}

View File

@ -0,0 +1,75 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Article as ArticleModel;
use App\Repos\Article as ArticleRepo;
class TaggedArticleList extends Cache
{
protected $limit = 15;
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "tagged_article_list:{$id}";
}
public function getContent($id = null)
{
$articleRepo = new ArticleRepo();
$where = [
'tag_id' => $id,
'published' => ArticleModel::PUBLISH_APPROVED,
'deleted' => 0,
];
$pager = $articleRepo->paginate($where);
if ($pager->total_items == 0) return [];
return $this->handleContent($pager->items);
}
/**
* @param ArticleModel[] $articles
* @return array
*/
public function handleContent($articles)
{
$result = [];
$count = 0;
foreach ($articles as $article) {
if ($count < $this->limit) {
$result[] = [
'id' => $article->id,
'title' => $article->title,
'cover' => $article->cover,
'view_count' => $article->view_count,
'like_count' => $article->like_count,
'comment_count' => $article->comment_count,
'favorite_count' => $article->favorite_count,
];
$count++;
}
}
return $result;
}
}

View File

@ -0,0 +1,75 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Question as QuestionModel;
use App\Repos\Question as QuestionRepo;
class TaggedQuestionList extends Cache
{
protected $limit = 15;
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "tagged_question_list:{$id}";
}
public function getContent($id = null)
{
$questionRepo = new QuestionRepo();
$where = [
'tag_id' => $id,
'published' => QuestionModel::PUBLISH_APPROVED,
'deleted' => 0,
];
$pager = $questionRepo->paginate($where);
if ($pager->total_items == 0) return [];
return $this->handleContent($pager->items);
}
/**
* @param QuestionModel[] $questions
* @return array
*/
public function handleContent($questions)
{
$result = [];
$count = 0;
foreach ($questions as $question) {
if ($count < $this->limit) {
$result[] = [
'id' => $question->id,
'title' => $question->title,
'view_count' => $question->view_count,
'like_count' => $question->like_count,
'answer_count' => $question->answer_count,
'favorite_count' => $question->favorite_count,
];
$count++;
}
}
return $result;
}
}

View File

@ -0,0 +1,152 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Caches;
use App\Models\Answer as AnswerModel;
use App\Models\AnswerLike as AnswerLikeModel;
use App\Repos\User as UserRepo;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class TopAnswererList extends Cache
{
protected $lifetime = 3600;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return 'top_answerer_list';
}
public function getContent($id = null)
{
$rankings = $this->findWeeklyAuthorRankings();
if ($rankings->count() > 0) {
$userIds = kg_array_column($rankings->toArray(), 'author_id');
return $this->handleUsers($userIds);
}
$rankings = $this->findMonthlyAuthorRankings();
if ($rankings->count() > 0) {
$userIds = kg_array_column($rankings->toArray(), 'author_id');
return $this->handleUsers($userIds);
}
$rankings = $this->findYearlyAuthorRankings();
if ($rankings->count() > 0) {
$userIds = kg_array_column($rankings->toArray(), 'author_id');
return $this->handleUsers($userIds);
}
$rankings = $this->findFullyAuthorRankings();
if ($rankings->count() > 0) {
$userIds = kg_array_column($rankings->toArray(), 'author_id');
return $this->handleUsers($userIds);
}
return [];
}
protected function handleUsers($userIds)
{
$userRepo = new UserRepo();
$users = $userRepo->findByIds($userIds);
$result = [];
foreach ($users as $user) {
$result[] = [
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
'title' => $user->title,
'about' => $user->about,
'vip' => $user->vip,
];
}
return $result;
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset
*/
protected function findWeeklyAuthorRankings($limit = 10)
{
$createTime = strtotime('monday this week');
return $this->findAuthorRankings($createTime, $limit);
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset
*/
protected function findMonthlyAuthorRankings($limit = 10)
{
$createTime = strtotime(date('Y-m-01'));
return $this->findAuthorRankings($createTime, $limit);
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset
*/
protected function findYearlyAuthorRankings($limit = 10)
{
$createTime = strtotime(date('Y-01-01'));
return $this->findAuthorRankings($createTime, $limit);
}
/**
* @param int $limit
* @return ResultsetInterface|Resultset
*/
protected function findFullyAuthorRankings($limit = 10)
{
$createTime = 0;
return $this->findAuthorRankings($createTime, $limit);
}
/**
* @param int $createTime
* @param int $limit
* @return ResultsetInterface|Resultset
*/
protected function findAuthorRankings($createTime, $limit = 10)
{
$columns = [
'author_id' => 'a.owner_id',
'like_count' => 'count(al.user_id)',
];
return $this->modelsManager->createBuilder()
->columns($columns)
->addFrom(AnswerLikeModel::class, 'al')
->join(AnswerModel::class, 'al.answer_id = a.id', 'a')
->where('al.create_time > :create_time:', ['create_time' => $createTime])
->groupBy('author_id')
->orderBy('like_count DESC')
->limit($limit)->getQuery()->execute();
}
}

Some files were not shown because too many files have changed in this diff Show More