From b9d78da1ce99a1630a6d9cc36acc4f3fad5f35dd Mon Sep 17 00:00:00 2001 From: koogua Date: Tue, 7 Sep 2021 17:29:23 +0800 Subject: [PATCH] v1.4.4 preview --- app/Builders/CourseUserList.php | 8 ++-- app/Builders/ResourceList.php | 5 +++ app/Console/Tasks/DeliverTask.php | 40 ++++++++++++------- app/Console/Tasks/VodEventTask.php | 6 --- app/Http/Admin/Services/Resource.php | 14 +++++++ app/Http/Admin/Services/Student.php | 2 +- .../Api/Controllers/ChapterController.php | 14 +++---- .../Home/Controllers/PublicController.php | 8 ++-- app/Http/Home/Views/chapter/resources.volt | 3 +- app/Http/Home/Views/course/show.volt | 8 ++-- app/Http/Home/Views/partials/header.volt | 2 +- app/Repos/Chapter.php | 12 ++++++ app/Services/Logic/Consult/ConsultCreate.php | 14 ++++++- app/Validators/Chapter.php | 2 +- app/Validators/Course.php | 23 ----------- app/Validators/CourseUser.php | 7 ++-- config/errors.php | 4 +- 17 files changed, 96 insertions(+), 76 deletions(-) diff --git a/app/Builders/CourseUserList.php b/app/Builders/CourseUserList.php index 07c1fada..1d7836fc 100644 --- a/app/Builders/CourseUserList.php +++ b/app/Builders/CourseUserList.php @@ -55,11 +55,9 @@ class CourseUserList extends Builder $result = []; foreach ($courses->toArray() as $course) { - if ($course['deleted'] == 0) { - $course['cover'] = $baseUrl . $course['cover']; - $course['attrs'] = json_decode($course['attrs'], true); - $result[$course['id']] = $course; - } + $course['cover'] = $baseUrl . $course['cover']; + $course['attrs'] = json_decode($course['attrs'], true); + $result[$course['id']] = $course; } return $result; diff --git a/app/Builders/ResourceList.php b/app/Builders/ResourceList.php index 1d47ba79..f767cef5 100644 --- a/app/Builders/ResourceList.php +++ b/app/Builders/ResourceList.php @@ -36,6 +36,11 @@ class ResourceList extends Builder $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; } diff --git a/app/Console/Tasks/DeliverTask.php b/app/Console/Tasks/DeliverTask.php index 5308cbc0..fd868471 100644 --- a/app/Console/Tasks/DeliverTask.php +++ b/app/Console/Tasks/DeliverTask.php @@ -17,6 +17,7 @@ use App\Models\Trade as TradeModel; use App\Repos\Course as CourseRepo; use App\Repos\ImGroup as ImGroupRepo; use App\Repos\ImGroupUser as ImGroupUserRepo; +use App\Repos\ImUser as ImUserRepo; use App\Repos\Order as OrderRepo; use App\Repos\User as UserRepo; use App\Services\Logic\Notice\OrderFinish as OrderFinishNotice; @@ -134,9 +135,7 @@ class DeliverTask extends Task $courseUser->role_type = CourseUserModel::ROLE_STUDENT; $courseUser->source_type = CourseUserModel::SOURCE_CHARGE; - if ($courseUser->create() === false) { - throw new \RuntimeException('Create Course User Failed'); - } + $courseUser->create(); $courseRepo = new CourseRepo(); @@ -150,6 +149,10 @@ class DeliverTask extends Task $group = $groupRepo->findByCourseId($course->id); + $imUserRepo = new ImUserRepo(); + + $imUser = $imUserRepo->findById($order->owner_id); + $groupUserRepo = new ImGroupUserRepo(); $groupUser = $groupUserRepo->findGroupUser($group->id, $order->owner_id); @@ -160,10 +163,13 @@ class DeliverTask extends Task $groupUser->group_id = $group->id; $groupUser->user_id = $order->owner_id; + $groupUser->create(); - if ($groupUser->create() === false) { - throw new \RuntimeException('Create Group User Failed'); - } + $imUser->group_count += 1; + $imUser->update(); + + $group->user_count += 1; + $group->update(); } } @@ -181,9 +187,7 @@ class DeliverTask extends Task $courseUser->role_type = CourseUserModel::ROLE_STUDENT; $courseUser->source_type = CourseUserModel::SOURCE_CHARGE; - if ($courseUser->create() === false) { - throw new \RuntimeException('Create Course User Failed'); - } + $courseUser->create(); $courseRepo = new CourseRepo(); @@ -197,6 +201,10 @@ class DeliverTask extends Task $group = $groupRepo->findByCourseId($course->id); + $imUserRepo = new ImUserRepo(); + + $imUser = $imUserRepo->findById($order->owner_id); + $groupUserRepo = new ImGroupUserRepo(); $groupUser = $groupUserRepo->findGroupUser($group->id, $order->owner_id); @@ -207,10 +215,13 @@ class DeliverTask extends Task $groupUser->group_id = $group->id; $groupUser->user_id = $order->owner_id; + $groupUser->create(); - if ($groupUser->create() === false) { - throw new \RuntimeException('Create Group User Failed'); - } + $imUser->group_count += 1; + $imUser->update(); + + $group->user_count += 1; + $group->update(); } } } @@ -224,11 +235,10 @@ class DeliverTask extends Task $user = $userRepo->findById($order->owner_id); $user->vip_expiry_time = $itemInfo['vip']['expiry_time']; + $user->vip = 1; - if ($user->update() === false) { - throw new \RuntimeException('Update Vip Expiry Failed'); - } + $user->update(); } protected function handleOrderConsumePoint(OrderModel $order) diff --git a/app/Console/Tasks/VodEventTask.php b/app/Console/Tasks/VodEventTask.php index 87fb06f9..5dd243d5 100644 --- a/app/Console/Tasks/VodEventTask.php +++ b/app/Console/Tasks/VodEventTask.php @@ -23,8 +23,6 @@ class VodEventTask extends Task $handles = []; - $count = 0; - foreach ($events as $event) { $handles[] = $event['EventHandle']; @@ -36,10 +34,6 @@ class VodEventTask extends Task } elseif ($event['EventType'] == 'FileDeleted') { $this->handleFileDeletedEvent($event); } - - $count++; - - if ($count >= 12) break; } $this->confirmEvents($handles); diff --git a/app/Http/Admin/Services/Resource.php b/app/Http/Admin/Services/Resource.php index ef7c2838..692fb173 100644 --- a/app/Http/Admin/Services/Resource.php +++ b/app/Http/Admin/Services/Resource.php @@ -124,6 +124,20 @@ class Resource extends Service $chapter->resource_count = $chapterRepo->countResources($chapter->id); $chapter->update(); + + $parent = $chapterRepo->findById($chapter->parent_id); + + $lessons = $chapterRepo->findLessons($parent->id); + + $resourceCount = 0; + + foreach ($lessons as $lesson) { + $resourceCount += $chapterRepo->countResources($lesson->id); + } + + $parent->resource_count = $resourceCount; + + $parent->update(); } protected function recountCourseResources(CourseModel $course) diff --git a/app/Http/Admin/Services/Student.php b/app/Http/Admin/Services/Student.php index c3205ac5..7c80e3bb 100644 --- a/app/Http/Admin/Services/Student.php +++ b/app/Http/Admin/Services/Student.php @@ -103,7 +103,7 @@ class Student extends Service $data['user_id'] = $user->id; $data['expiry_time'] = $expiryTime; - $validator->checkIfJoined($post['course_id'], $post['user_id']); + $validator->checkIfImported($post['course_id'], $post['user_id']); $courseUser = new CourseUserModel(); diff --git a/app/Http/Api/Controllers/ChapterController.php b/app/Http/Api/Controllers/ChapterController.php index 975d76d1..63ca974f 100644 --- a/app/Http/Api/Controllers/ChapterController.php +++ b/app/Http/Api/Controllers/ChapterController.php @@ -7,12 +7,12 @@ namespace App\Http\Api\Controllers; -use App\Services\Logic\Article\CommentList as CommentListService; use App\Services\Logic\Chapter\ChapterInfo as ChapterInfoService; use App\Services\Logic\Chapter\ChapterLike as ChapterLikeService; -use App\Services\Logic\Chapter\ConsultList as ChapterConsultListService; -use App\Services\Logic\Chapter\Learning as ChapterLearningService; -use App\Services\Logic\Chapter\ResourceList as ChapterResourceListService; +use App\Services\Logic\Chapter\CommentList as CommentListService; +use App\Services\Logic\Chapter\ConsultList as ConsultListService; +use App\Services\Logic\Chapter\Learning as LearningService; +use App\Services\Logic\Chapter\ResourceList as ResourceListService; /** * @RoutePrefix("/api/chapter") @@ -37,7 +37,7 @@ class ChapterController extends Controller */ public function consultsAction($id) { - $service = new ChapterConsultListService(); + $service = new ConsultListService(); $pager = $service->handle($id); @@ -49,7 +49,7 @@ class ChapterController extends Controller */ public function resourcesAction($id) { - $service = new ChapterResourceListService(); + $service = new ResourceListService(); $resources = $service->handle($id); @@ -91,7 +91,7 @@ class ChapterController extends Controller */ public function learningAction($id) { - $service = new ChapterLearningService(); + $service = new LearningService(); $service->handle($id); diff --git a/app/Http/Home/Controllers/PublicController.php b/app/Http/Home/Controllers/PublicController.php index 637321d9..1cb5a608 100644 --- a/app/Http/Home/Controllers/PublicController.php +++ b/app/Http/Home/Controllers/PublicController.php @@ -25,13 +25,15 @@ class PublicController extends \Phalcon\Mvc\Controller use SecurityTrait; /** - * @Get("/download/{md5}", name="home.download") + * @Get("/download/{id}", name="home.download") */ - public function downloadAction($md5) + public function downloadAction($id) { + $id = $this->crypt->decryptBase64($id, null, true); + $repo = new UploadRepo(); - $file = $repo->findByMd5($md5); + $file = $repo->findById($id); if ($file) { diff --git a/app/Http/Home/Views/chapter/resources.volt b/app/Http/Home/Views/chapter/resources.volt index 71cbd243..67c32c57 100644 --- a/app/Http/Home/Views/chapter/resources.volt +++ b/app/Http/Home/Views/chapter/resources.volt @@ -9,11 +9,10 @@ 操作 {% for item in items %} - {% set download_url = url({'for':'home.download','md5':item.md5}) %} {{ item.name }} {{ item.size|human_size }} - 下载 + 下载 {% endfor %} diff --git a/app/Http/Home/Views/course/show.volt b/app/Http/Home/Views/course/show.volt index 0c65df54..ab5c2d63 100644 --- a/app/Http/Home/Views/course/show.volt +++ b/app/Http/Home/Views/course/show.volt @@ -34,8 +34,8 @@
    -
  • 目录
  • -
  • 详情
  • +
  • 详情
  • +
  • 目录
  • {% if show_tab_packages %}
  • 套餐{{ course.package_count }}
  • {% endif %} @@ -48,10 +48,10 @@
- {{ partial('course/show_catalog') }} +
{{ course.details }}
-
{{ course.details }}
+ {{ partial('course/show_catalog') }}
{% if show_tab_packages %} {% set packages_url = url({'for':'home.course.packages','id':course.id}) %} diff --git a/app/Http/Home/Views/partials/header.volt b/app/Http/Home/Views/partials/header.volt index eed37828..9ea1f6db 100644 --- a/app/Http/Home/Views/partials/header.volt +++ b/app/Http/Home/Views/partials/header.volt @@ -42,7 +42,7 @@ {% endif %} {% if auth_user.id > 0 %}
  • - 创建 + 发布
    提问题
    写文章
    diff --git a/app/Repos/Chapter.php b/app/Repos/Chapter.php index db01204a..57b652cd 100644 --- a/app/Repos/Chapter.php +++ b/app/Repos/Chapter.php @@ -78,6 +78,18 @@ class Chapter extends Repository ->execute(); } + /** + * @param int $id + * @return ResultsetInterface|Resultset|ChapterModel[] + */ + public function findLessons($id) + { + return ChapterModel::query() + ->where('parent_id = :parent_id:', ['parent_id' => $id]) + ->andWhere('deleted = 0') + ->execute(); + } + /** * @param string $fileId * @return ChapterModel|Model|bool diff --git a/app/Services/Logic/Consult/ConsultCreate.php b/app/Services/Logic/Consult/ConsultCreate.php index 86fad6c4..0cfe85fd 100644 --- a/app/Services/Logic/Consult/ConsultCreate.php +++ b/app/Services/Logic/Consult/ConsultCreate.php @@ -64,7 +64,12 @@ class ConsultCreate extends LogicService $validator = new ConsultValidator(); $question = $validator->checkQuestion($post['question']); - $private = $validator->checkPrivateStatus($post['private']); + + $private = 0; + + if (isset($post['private'])) { + $private = $validator->checkPrivateStatus($post['private']); + } $validator->checkIfDuplicated($course->id, $user->id, $question); @@ -101,7 +106,12 @@ class ConsultCreate extends LogicService $validator = new ConsultValidator(); $question = $validator->checkQuestion($post['question']); - $private = $validator->checkPrivateStatus($post['private']); + + $private = 0; + + if (isset($post['private'])) { + $private = $validator->checkPrivateStatus($post['private']); + } $validator->checkIfDuplicated($course->id, $user->id, $question); diff --git a/app/Validators/Chapter.php b/app/Validators/Chapter.php index 1c2fee67..03510a42 100644 --- a/app/Validators/Chapter.php +++ b/app/Validators/Chapter.php @@ -205,7 +205,7 @@ class Chapter extends Validator if ($attrs['word_count'] == 0) { throw new BadRequestException('chapter.read_not_ready'); } - } elseif ($chapter->model == CourseModel::MODEL_READ) { + } elseif ($chapter->model == CourseModel::MODEL_OFFLINE) { if ($attrs['start_time'] == 0) { throw new BadRequestException('chapter.offline_time_empty'); } diff --git a/app/Validators/Course.php b/app/Validators/Course.php index eadca9c2..6262b8e2 100644 --- a/app/Validators/Course.php +++ b/app/Validators/Course.php @@ -246,29 +246,6 @@ class Course extends Validator if ($course->teacher_id == 0) { throw new BadRequestException('course.teacher_not_assigned'); } - - $courseRepo = new CourseRepo(); - - $chapters = $courseRepo->findChapters($course->id); - - $totalCount = $publishedCount = 0; - - foreach ($chapters as $chapter) { - if ($chapter->parent_id > 0 && $chapter->published == 1) { - $publishedCount++; - } - if ($chapter->parent_id > 0) { - $totalCount++; - } - } - - if ($publishedCount == 0) { - throw new BadRequestException('course.pub_chapter_not_found'); - } - - if ($publishedCount / $totalCount < 0.2) { - throw new BadRequestException('course.pub_chapter_not_enough'); - } } } diff --git a/app/Validators/CourseUser.php b/app/Validators/CourseUser.php index b0757b3a..67eb19d6 100644 --- a/app/Validators/CourseUser.php +++ b/app/Validators/CourseUser.php @@ -9,6 +9,7 @@ namespace App\Validators; use App\Exceptions\BadRequest as BadRequestException; use App\Library\Validators\Common as CommonValidator; +use App\Models\CourseUser as CourseUserModel; use App\Repos\CourseUser as CourseUserRepo; class CourseUser extends Validator @@ -65,14 +66,14 @@ class CourseUser extends Validator return strtotime($value); } - public function checkIfJoined($courseId, $userId) + public function checkIfImported($courseId, $userId) { $repo = new CourseUserRepo(); $courseUser = $repo->findCourseStudent($courseId, $userId); - if ($courseUser) { - throw new BadRequestException('course_user.has_joined'); + if ($courseUser && $courseUser->source_type == CourseUserModel::SOURCE_IMPORT) { + throw new BadRequestException('course_user.has_imported'); } } diff --git a/config/errors.php b/config/errors.php index acf05cd7..7b48669d 100644 --- a/config/errors.php +++ b/config/errors.php @@ -184,8 +184,6 @@ $error['course.invalid_refund_expiry'] = '无效的退款期限'; $error['course.invalid_feature_status'] = '无效的推荐状态'; $error['course.invalid_publish_status'] = '无效的发布状态'; $error['course.teacher_not_assigned'] = '尚未指定授课教师'; -$error['course.pub_chapter_not_found'] = '尚未发现已发布的课时'; -$error['course.pub_chapter_not_enough'] = '已发布的课时太少(小于20%)'; /** * 面授课程相关 @@ -240,7 +238,7 @@ $error['package.invalid_expiry'] = '无效的期限(范围:1~60)'; $error['course_user.not_found'] = '课程学员关系不存在'; $error['course_user.invalid_expiry_time'] = '无效的过期时间'; $error['course_user.review_not_allowed'] = '当前不允许评价课程'; -$error['course_user.has_joined'] = '已经加入过该课程'; +$error['course_user.has_imported'] = '已经加入过该课程'; $error['course_user.has_reviewed'] = '已经评价过该课程'; /**