难度级别{{ level_info(course.level) }} 学习人次{{ course.user_count }} - 综合评分{{ course.ratings.rating }} + 综合评分{{ "%0.1f"|format(course.ratings.rating) }}
diff --git a/README.md b/README.md index 2a55c157..1a478c4f 100644 --- a/README.md +++ b/README.md @@ -6,39 +6,44 @@ 都有些什么功能?我也不想写一大堆,自己体验吧! +帐号:100015@163.com / 123456 (前后台通用) + PS:**系统后台已禁止提交并隐藏私人配置** - [前台演示](https://ctc.koogua.com) - [后台演示](https://ctc.koogua.com/admin) -- [系统截图](https://gitee.com/koogua/course-tencent-cloud/wikis/系统截图) - -体验帐号: 100015@163.com / 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) - 其它依赖:[php7.3](https://php.net), [mysql5.7](https://mysql.com), [redis5.0](https://redis.io) #### 使用协议 -虽然尝试了解开源协议,但是似乎不得要领,干脆用自己的协议吧,算不算开源我也不很清楚。 +虽然尝试了解过开源协议,但是理解的模棱两可,干脆用自己的协议吧,算不算开源我也不很清楚。 1. 本系统属于强业务类型,非通用类库框架,不适合再次衍生发布。 2. 在保留我们版权标识的前提下,用户可以修改以满足自己的需求,可以用于商业用途。 3. 有限社区支持,用户对自己的行为负责。 +#### 安装指南 + +- [运行环境搭建](https://gitee.com/koogua/course-tencent-cloud-docker) +- [系统服务配置](https://gitee.com/koogua/course-tencent-cloud/wikis/服务配置) + #### 会推出商业服务吗? - 如果不符合您对“开源”的认知,请移步其它同类产品,毕竟同类“免费”产品也很多。 -- 如果“开源”版本不能满足您的需求,或者您更希望有更好的支持,商业服务是不错的选择。 +- 如果“开源”版本不能满足您的需求,或者您希望有更好的支持,商业服务是不错的选择。 -我们目前提供的服务: +我们为用户提供的服务包括: -- 安装服务 -- 会员服务 -- 定制服务 +- 系统安装 +- 系统定制 +- 企业会员 #### 会有阿里云版吗? @@ -50,11 +55,9 @@ PS:**系统后台已禁止提交并隐藏私人配置** #### 通过这个项目能学到什么? -把所有代码看完,希望对你有启发。把各个环节跑通,会引出很多知识。 - -1. 项目规划,phalcon实战,缓存,JWT,websocket即时通讯 -2. docker操作,docker服务编排 -3. git,linux,php,mysql,redis,nginx ... +1. 项目规划,phalcon实战,缓存,JWT,即时通讯,全文检索 +2. docker操作,docker服务编排,supervisor,devops +3. git,linux,php,mysql,redis,nginx #### 开发计划 diff --git a/app/Builders/ConsultList.php b/app/Builders/ConsultList.php index c74407bd..2223f559 100644 --- a/app/Builders/ConsultList.php +++ b/app/Builders/ConsultList.php @@ -73,7 +73,7 @@ class ConsultList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/CourseFavoriteList.php b/app/Builders/CourseFavoriteList.php index 9d196641..a516a3a4 100644 --- a/app/Builders/CourseFavoriteList.php +++ b/app/Builders/CourseFavoriteList.php @@ -45,7 +45,7 @@ class CourseFavoriteList extends Builder $courses = $courseRepo->findByIds($ids, $columns); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; @@ -69,7 +69,7 @@ class CourseFavoriteList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/CourseList.php b/app/Builders/CourseList.php index 17659789..667de997 100644 --- a/app/Builders/CourseList.php +++ b/app/Builders/CourseList.php @@ -61,7 +61,7 @@ class CourseList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/CourseTopicList.php b/app/Builders/CourseTopicList.php index 8ae453d8..0d7ebd46 100644 --- a/app/Builders/CourseTopicList.php +++ b/app/Builders/CourseTopicList.php @@ -45,7 +45,7 @@ class CourseTopicList extends Builder $courses = $courseRepo->findByIds($ids, $columns); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/CourseUserList.php b/app/Builders/CourseUserList.php index 153dd22c..b1579725 100644 --- a/app/Builders/CourseUserList.php +++ b/app/Builders/CourseUserList.php @@ -45,7 +45,7 @@ class CourseUserList extends Builder $courses = $courseRepo->findByIds($ids, $columns); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; @@ -66,7 +66,7 @@ class CourseUserList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/DanmuList.php b/app/Builders/DanmuList.php index 0886ed9c..59fa36cb 100644 --- a/app/Builders/DanmuList.php +++ b/app/Builders/DanmuList.php @@ -84,7 +84,7 @@ class DanmuList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/ImFriendUserList.php b/app/Builders/ImFriendUserList.php index f8a39826..50d69ce7 100644 --- a/app/Builders/ImFriendUserList.php +++ b/app/Builders/ImFriendUserList.php @@ -31,7 +31,7 @@ class ImFriendUserList extends Builder $users = $userRepo->findByIds($ids, $columns); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/ImGroupList.php b/app/Builders/ImGroupList.php index 7f779425..39316477 100644 --- a/app/Builders/ImGroupList.php +++ b/app/Builders/ImGroupList.php @@ -55,7 +55,7 @@ class ImGroupList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/ImGroupUserList.php b/app/Builders/ImGroupUserList.php index 4947f967..dafe443f 100644 --- a/app/Builders/ImGroupUserList.php +++ b/app/Builders/ImGroupUserList.php @@ -40,7 +40,7 @@ class ImGroupUserList extends Builder $users = $userRepo->findByIds($ids, $columns); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; @@ -64,7 +64,7 @@ class ImGroupUserList extends Builder $users = $this->getGroupOwners($groups->toArray()); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/ImMessageList.php b/app/Builders/ImMessageList.php index 486feb25..0c394cc6 100644 --- a/app/Builders/ImMessageList.php +++ b/app/Builders/ImMessageList.php @@ -26,7 +26,7 @@ class ImMessageList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/OrderList.php b/app/Builders/OrderList.php index 18caf72b..5a5a2ff6 100644 --- a/app/Builders/OrderList.php +++ b/app/Builders/OrderList.php @@ -12,7 +12,7 @@ class OrderList extends Builder public function __construct() { - $this->imgBaseUrl = kg_ci_base_url(); + $this->imgBaseUrl = kg_ss_url(); } /** diff --git a/app/Builders/ReviewList.php b/app/Builders/ReviewList.php index a78a1f65..e16f430b 100644 --- a/app/Builders/ReviewList.php +++ b/app/Builders/ReviewList.php @@ -55,7 +55,7 @@ class ReviewList extends Builder $users = $userRepo->findByIds($ids, ['id', 'name', 'avatar']); - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); $result = []; diff --git a/app/Builders/UserList.php b/app/Builders/UserList.php index b033ec1b..4731773e 100644 --- a/app/Builders/UserList.php +++ b/app/Builders/UserList.php @@ -10,7 +10,7 @@ class UserList extends Builder public function handleUsers(array $users) { - $baseUrl = kg_ci_base_url(); + $baseUrl = kg_ss_url(); foreach ($users as $key => $user) { $users[$key]['avatar'] = $baseUrl . $user['avatar']; diff --git a/app/Console/Tasks/CleanSessionTask.php b/app/Console/Tasks/CleanSessionTask.php index a7140a1b..2be57e51 100644 --- a/app/Console/Tasks/CleanSessionTask.php +++ b/app/Console/Tasks/CleanSessionTask.php @@ -4,39 +4,32 @@ namespace App\Console\Tasks; use App\Library\Cache\Backend\Redis as RedisCache; use Phalcon\Cli\Task; +use Phalcon\Config; class CleanSessionTask extends Task { - /** - * @var RedisCache - */ - protected $cache; - - /** - * @var \Redis - */ - protected $redis; - public function mainAction() { - $this->cache = $this->getDI()->get('cache'); + $config = $this->getConfig(); - $this->redis = $this->cache->getRedis(); + $cache = $this->getCache(); + + $redis = $cache->getRedis(); + + $redis->select($config->path('session.db')); $keys = $this->querySessionKeys(10000); if (count($keys) == 0) return; - $config = $this->getDI()->get('config'); - - $lifetime = $config->session->lifetime; + $lifetime = $config->path('session.lifetime'); foreach ($keys as $key) { - $ttl = $this->redis->ttl($key); - $content = $this->redis->get($key); + $ttl = $redis->ttl($key); + $content = $redis->get($key); if (empty($content) && $ttl < $lifetime * 0.5) { - $this->redis->del($key); + $redis->del($key); } } } @@ -49,7 +42,29 @@ class CleanSessionTask extends Task */ protected function querySessionKeys($limit) { - return $this->cache->queryKeys('_PHCR', $limit); + $cache = $this->getCache(); + + return $cache->queryKeys('_PHCR', $limit); + } + + protected function getConfig() + { + /** + * @var Config $config + */ + $config = $this->getDI()->get('config'); + + return $config; + } + + protected function getCache() + { + /** + * @var RedisCache $cache + */ + $cache = $this->getDI()->get('cache'); + + return $cache; } } diff --git a/app/Http/Admin/Controllers/ChapterController.php b/app/Http/Admin/Controllers/ChapterController.php index 755c9ba1..bbef2879 100644 --- a/app/Http/Admin/Controllers/ChapterController.php +++ b/app/Http/Admin/Controllers/ChapterController.php @@ -5,7 +5,6 @@ namespace App\Http\Admin\Controllers; use App\Http\Admin\Services\Chapter as ChapterService; use App\Http\Admin\Services\ChapterContent as ChapterContentService; use App\Http\Admin\Services\Course as CourseService; -use App\Http\Admin\Services\Setting as SettingService; use App\Models\Course as CourseModel; /** @@ -86,13 +85,10 @@ class ChapterController extends Controller $contentService = new ChapterContentService(); $chapterService = new ChapterService(); $courseService = new CourseService(); - $settingService = new SettingService(); $chapter = $chapterService->getChapter($id); $course = $courseService->getCourse($chapter->course_id); - $storage = $settingService->getSectionSettings('storage'); - $this->view->setVar('storage', $storage); $this->view->setVar('chapter', $chapter); $this->view->setVar('course', $course); diff --git a/app/Http/Admin/Controllers/SettingController.php b/app/Http/Admin/Controllers/SettingController.php index c06cf6d6..1531065b 100644 --- a/app/Http/Admin/Controllers/SettingController.php +++ b/app/Http/Admin/Controllers/SettingController.php @@ -31,7 +31,7 @@ class SettingController extends Controller $site = $settingService->getSectionSettings($section); - $site['base_url'] = $site['base_url'] ?: kg_site_base_url(); + $site['url'] = $site['url'] ?: kg_site_url(); $this->view->setVar('site', $site); } @@ -67,7 +67,7 @@ class SettingController extends Controller */ public function storageAction() { - $section = 'storage'; + $section = 'cos'; $settingService = new SettingService(); @@ -81,9 +81,9 @@ class SettingController extends Controller } else { - $storage = $settingService->getSectionSettings($section); + $cos = $settingService->getSectionSettings($section); - $this->view->setVar('storage', $storage); + $this->view->setVar('cos', $cos); } } diff --git a/app/Http/Admin/Controllers/UploadController.php b/app/Http/Admin/Controllers/UploadController.php index f7ab899f..eb251179 100644 --- a/app/Http/Admin/Controllers/UploadController.php +++ b/app/Http/Admin/Controllers/UploadController.php @@ -22,7 +22,7 @@ class UploadController extends Controller if ($file) { return $this->jsonSuccess([ 'data' => [ - 'src' => $service->getCiImageUrl($file->path), + 'src' => $service->getImageUrl($file->path), 'title' => $file->name, ] ]); @@ -43,7 +43,7 @@ class UploadController extends Controller if ($file) { return $this->jsonSuccess([ 'data' => [ - 'src' => $service->getCiImageUrl($file->path), + 'src' => $service->getImageUrl($file->path), 'title' => $file->name, ] ]); @@ -64,7 +64,7 @@ class UploadController extends Controller if ($file) { return $this->jsonSuccess([ 'data' => [ - 'src' => $service->getCiImageUrl($file->path), + 'src' => $service->getImageUrl($file->path), 'title' => $file->name, ] ]); diff --git a/app/Http/Admin/Services/Setting.php b/app/Http/Admin/Services/Setting.php index 68b7709c..dfc4b47b 100644 --- a/app/Http/Admin/Services/Setting.php +++ b/app/Http/Admin/Services/Setting.php @@ -94,12 +94,8 @@ class Setting extends Service { $protocol = ['http://', 'https://']; - if (isset($settings['bucket_domain'])) { - $settings['bucket_domain'] = str_replace($protocol, '', $settings['bucket_domain']); - } - - if (isset($settings['ci_domain'])) { - $settings['ci_domain'] = str_replace($protocol, '', $settings['ci_domain']); + if (isset($settings['domain'])) { + $settings['domain'] = str_replace($protocol, '', $settings['domain']); } $this->updateSectionSettings($section, $settings); @@ -114,12 +110,10 @@ class Setting extends Service { $protocol = ['http://', 'https://']; - if (isset($settings['push_domain'])) { - $settings['push_domain'] = str_replace($protocol, '', $settings['push_domain']); - } - - if (isset($settings['pull_domain'])) { - $settings['pull_domain'] = str_replace($protocol, '', $settings['pull_domain']); + if (in_array($section, ['live.push', 'live.pull'])) { + if (isset($settings['domain'])) { + $settings['domain'] = str_replace($protocol, '', $settings['domain']); + } } $this->updateSectionSettings($section, $settings); diff --git a/app/Http/Admin/Views/chapter/edit_lesson.volt b/app/Http/Admin/Views/chapter/edit_lesson.volt index 9b30eba6..802c973e 100644 --- a/app/Http/Admin/Views/chapter/edit_lesson.volt +++ b/app/Http/Admin/Views/chapter/edit_lesson.volt @@ -26,11 +26,11 @@ {{ partial('chapter/edit_lesson_basic') }}
模板名称 | -模板描述 | -视频码率(kbps) | -视频高度(px) | -
---|---|---|---|
fd | -流畅 | -500 | -540 | -
sd | -标清 | -1000 | -720 | -
hd | -高清 | -2000 | -1080 | -
模板名称 | +模板描述 | +视频码率(kbps) | +视频高度(px) | +
---|---|---|---|
fd | +流畅 | +500 | +540 | +
sd | +标清 | +1000 | +720 | +
hd | +高清 | +2000 | +1080 | +
样式名称 | +样式描述 | +
---|---|
avatar_160 | +imageMogr2/thumbnail/160x/interlace/0 | +
cover_270 | +mageMogr2/thumbnail/270x/interlace/0 | +
carousel_1100 | +imageMogr2/thumbnail/1100x/interlace/0 | +
难度级别{{ level_info(course.level) }} 学习人次{{ course.user_count }} - 综合评分{{ course.ratings.rating }} + 综合评分{{ "%0.1f"|format(course.ratings.rating) }}