From 0e77c07f17ccf83b1593fd734ef38f2f9a44efa5 Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Sat, 9 May 2020 22:08:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Builders/ChapterTreeList.php | 2 - app/Caches/CourseTeacherList.php | 1 + app/Caches/IndexFreeCourseList.php | 5 +- app/Caches/IndexLiveList.php | 3 - app/Caches/IndexNewCourseList.php | 5 +- app/Caches/IndexSlideList.php | 20 +++- app/Caches/IndexVipCourseList.php | 5 +- app/Http/Admin/Services/Course.php | 1 + app/Http/Admin/Services/Slide.php | 4 +- app/Http/Admin/Views/course/list.volt | 16 +++- .../Web/Controllers/ChapterController.php | 51 +++------- .../Web/Controllers/CommentController.php | 94 +++++++++++++++++++ .../Web/Controllers/ConsultController.php | 94 +++++++++++++++++++ app/Http/Web/Controllers/CourseController.php | 4 +- app/Http/Web/Controllers/MyController.php | 65 +++++++------ app/Http/Web/Controllers/OrderController.php | 77 +-------------- .../Web/Controllers/PackageController.php | 38 ++++++++ app/Http/Web/Controllers/ReviewController.php | 77 +++++++-------- app/Http/Web/Controllers/TopicController.php | 38 ++++++++ app/Http/Web/Controllers/UserController.php | 21 +++-- app/Models/Order.php | 2 + app/Models/Refund.php | 2 + app/Models/Review.php | 29 +++++- app/Models/Trade.php | 2 + app/Providers/Response.php | 2 +- app/Repos/Slide.php | 14 --- app/Services/Frontend/Chapter/ChapterInfo.php | 24 +---- app/Services/Frontend/Chapter/CommentList.php | 10 +- .../Frontend/Comment/CommentCreate.php | 10 +- .../Frontend/Comment/CommentDelete.php | 12 +-- app/Services/Frontend/Comment/CommentInfo.php | 71 ++++++++++++++ .../Frontend/Comment/CommentUpdate.php | 42 +++++++++ app/Services/Frontend/Consult/AgreeVote.php | 2 +- .../Frontend/Consult/ConsultDelete.php | 38 ++++++++ app/Services/Frontend/Consult/ConsultInfo.php | 71 ++++++++++++++ .../Frontend/Consult/ConsultUpdate.php | 36 +++++++ app/Services/Frontend/Course/ChapterList.php | 12 +-- app/Services/Frontend/Course/ConsultList.php | 4 +- app/Services/Frontend/Course/ReviewList.php | 2 +- app/Services/Frontend/My/ConsultList.php | 3 +- app/Services/Frontend/My/CourseList.php | 6 +- app/Services/Frontend/My/FavoriteList.php | 10 +- app/Services/Frontend/My/OrderList.php | 8 +- app/Services/Frontend/My/RefundList.php | 7 +- app/Services/Frontend/My/ReviewList.php | 73 ++++++++++++++ app/Services/Frontend/My/UserInfo.php | 2 +- .../{OrderConfirmInfo.php => ConfirmInfo.php} | 35 ++++--- app/Services/Frontend/Order/OrderCancel.php | 4 +- app/Services/Frontend/Order/OrderCreate.php | 15 ++- app/Services/Frontend/Order/OrderInfo.php | 43 ++------- .../Order/{OrderTrade.php => TradeCreate.php} | 14 +-- app/Services/Frontend/OrderTrait.php | 2 +- app/Services/Frontend/Package/CourseList.php | 9 +- app/Services/Frontend/Review/ReviewCreate.php | 2 + app/Services/Frontend/Review/ReviewDelete.php | 38 ++++++++ app/Services/Frontend/Review/ReviewInfo.php | 72 ++++++++++++++ app/Services/Frontend/Review/ReviewUpdate.php | 35 +++++++ app/Services/Frontend/User/CourseList.php | 2 +- app/Services/Frontend/User/UserInfo.php | 2 - app/Validators/Category.php | 4 +- app/Validators/Chapter.php | 4 +- app/Validators/Course.php | 36 ++++++- app/Validators/Nav.php | 4 +- app/Validators/Order.php | 8 +- app/Validators/Slide.php | 2 +- config/errors.php | 28 +++--- 66 files changed, 1069 insertions(+), 405 deletions(-) create mode 100644 app/Http/Web/Controllers/CommentController.php create mode 100644 app/Http/Web/Controllers/ConsultController.php create mode 100644 app/Http/Web/Controllers/PackageController.php create mode 100644 app/Http/Web/Controllers/TopicController.php create mode 100644 app/Services/Frontend/Comment/CommentInfo.php create mode 100644 app/Services/Frontend/Comment/CommentUpdate.php create mode 100644 app/Services/Frontend/Consult/ConsultDelete.php create mode 100644 app/Services/Frontend/Consult/ConsultInfo.php create mode 100644 app/Services/Frontend/Consult/ConsultUpdate.php create mode 100644 app/Services/Frontend/My/ReviewList.php rename app/Services/Frontend/Order/{OrderConfirmInfo.php => ConfirmInfo.php} (74%) rename app/Services/Frontend/Order/{OrderTrade.php => TradeCreate.php} (86%) create mode 100644 app/Services/Frontend/Review/ReviewDelete.php create mode 100644 app/Services/Frontend/Review/ReviewInfo.php create mode 100644 app/Services/Frontend/Review/ReviewUpdate.php diff --git a/app/Builders/ChapterTreeList.php b/app/Builders/ChapterTreeList.php index 651a1ec0..d4dce9bd 100644 --- a/app/Builders/ChapterTreeList.php +++ b/app/Builders/ChapterTreeList.php @@ -28,7 +28,6 @@ class ChapterTreeList extends Builder $list[] = [ 'id' => $chapter->id, 'title' => $chapter->title, - 'summary' => $chapter->summary, 'priority' => $chapter->priority, 'children' => $this->handleChildren($chapter), ]; @@ -65,7 +64,6 @@ class ChapterTreeList extends Builder $list[] = [ 'id' => $lesson->id, 'title' => $lesson->title, - 'summary' => $lesson->summary, 'free' => $lesson->free, 'attrs' => $attrs, ]; diff --git a/app/Caches/CourseTeacherList.php b/app/Caches/CourseTeacherList.php index f13d08c2..051160cf 100644 --- a/app/Caches/CourseTeacherList.php +++ b/app/Caches/CourseTeacherList.php @@ -47,6 +47,7 @@ class CourseTeacherList extends Cache 'name' => $user->name, 'avatar' => $user->avatar, 'title' => $user->title, + 'about' => $user->about, ]; } diff --git a/app/Caches/IndexFreeCourseList.php b/app/Caches/IndexFreeCourseList.php index 89698328..45eeb4c7 100644 --- a/app/Caches/IndexFreeCourseList.php +++ b/app/Caches/IndexFreeCourseList.php @@ -10,9 +10,6 @@ use Phalcon\Mvc\Model\ResultsetInterface; /** * 免费课程 - * - * Class IndexNewbieCourseList - * @package App\Caches */ class IndexFreeCourseList extends Cache { @@ -88,7 +85,7 @@ class IndexFreeCourseList extends Cache protected function findCategories($limit = 5) { return CategoryModel::query() - ->andWhere('published = 1') + ->where('level = 1 AND published = 1') ->orderBy('priority ASC') ->limit($limit) ->execute(); diff --git a/app/Caches/IndexLiveList.php b/app/Caches/IndexLiveList.php index 906d3960..2b62463c 100644 --- a/app/Caches/IndexLiveList.php +++ b/app/Caches/IndexLiveList.php @@ -9,9 +9,6 @@ use Phalcon\Mvc\Model\Resultset; /** * 直播课程 - * - * Class IndexLiveList - * @package App\Caches */ class IndexLiveList extends Cache { diff --git a/app/Caches/IndexNewCourseList.php b/app/Caches/IndexNewCourseList.php index 4a155ac0..2d19d11e 100644 --- a/app/Caches/IndexNewCourseList.php +++ b/app/Caches/IndexNewCourseList.php @@ -10,9 +10,6 @@ use Phalcon\Mvc\Model\ResultsetInterface; /** * 新上课程 - * - * Class IndexLatestCourseList - * @package App\Caches */ class IndexNewCourseList extends Cache { @@ -88,7 +85,7 @@ class IndexNewCourseList extends Cache protected function findCategories($limit = 5) { return CategoryModel::query() - ->andWhere('published = 1') + ->where('level = 1 AND published = 1') ->orderBy('priority ASC') ->limit($limit) ->execute(); diff --git a/app/Caches/IndexSlideList.php b/app/Caches/IndexSlideList.php index 145f0270..e5ccce77 100644 --- a/app/Caches/IndexSlideList.php +++ b/app/Caches/IndexSlideList.php @@ -3,7 +3,8 @@ namespace App\Caches; use App\Models\Slide as SlideModel; -use App\Repos\Slide as SlideRepo; +use Phalcon\Mvc\Model\Resultset; +use Phalcon\Mvc\Model\ResultsetInterface; class IndexSlideList extends Cache { @@ -24,9 +25,7 @@ class IndexSlideList extends Cache { $limit = 5; - $slideRepo = new SlideRepo(); - - $slides = $slideRepo->findTopSlides($limit); + $slides = $this->findSlides($limit); if ($slides->count() == 0) { return []; @@ -56,4 +55,17 @@ class IndexSlideList extends Cache return $result; } + /** + * @param int $limit + * @return ResultsetInterface|Resultset|SlideModel[] + */ + public function findSlides($limit = 5) + { + return SlideModel::query() + ->where('published = 1 AND deleted = 0') + ->orderBy('priority ASC') + ->limit($limit) + ->execute(); + } + } diff --git a/app/Caches/IndexVipCourseList.php b/app/Caches/IndexVipCourseList.php index b5a90d65..c692a390 100644 --- a/app/Caches/IndexVipCourseList.php +++ b/app/Caches/IndexVipCourseList.php @@ -10,9 +10,6 @@ use Phalcon\Mvc\Model\ResultsetInterface; /** * 会员特价课程 - * - * Class IndexNewbieCourseList - * @package App\Caches */ class IndexVipCourseList extends Cache { @@ -88,7 +85,7 @@ class IndexVipCourseList extends Cache protected function findCategories($limit = 5) { return CategoryModel::query() - ->andWhere('published = 1') + ->where('level = 1 AND published = 1') ->orderBy('priority ASC') ->limit($limit) ->execute(); diff --git a/app/Http/Admin/Services/Course.php b/app/Http/Admin/Services/Course.php index 11abf1b9..f766fea2 100644 --- a/app/Http/Admin/Services/Course.php +++ b/app/Http/Admin/Services/Course.php @@ -122,6 +122,7 @@ class Course extends Service } else { $data['market_price'] = $validator->checkMarketPrice($post['market_price']); $data['vip_price'] = $validator->checkVipPrice($post['vip_price']); + $validator->checkComparePrice($post['market_price'], $post['vip_price']); $data['study_expiry'] = $validator->checkStudyExpiry($post['study_expiry']); $data['refund_expiry'] = $validator->checkRefundExpiry($post['refund_expiry']); } diff --git a/app/Http/Admin/Services/Slide.php b/app/Http/Admin/Services/Slide.php index 15b55587..5acaa2a3 100644 --- a/app/Http/Admin/Services/Slide.php +++ b/app/Http/Admin/Services/Slide.php @@ -2,7 +2,7 @@ namespace App\Http\Admin\Services; -use App\Caches\IndexSlideList as SlideListCache; +use App\Caches\IndexSlideList as IndexSlideListCache; use App\Library\Paginator\Query as PagerQuery; use App\Models\Slide as SlideModel; use App\Repos\Slide as SlideRepo; @@ -142,7 +142,7 @@ class Slide extends Service protected function rebuildSlideCache() { - $cache = new SlideListCache(); + $cache = new IndexSlideListCache(); $cache->rebuild(); } diff --git a/app/Http/Admin/Views/course/list.volt b/app/Http/Admin/Views/course/list.volt index 010d55da..a333aa1d 100644 --- a/app/Http/Admin/Views/course/list.volt +++ b/app/Http/Admin/Views/course/list.volt @@ -8,6 +8,20 @@ {% endif %} {%- endmacro %} +{%- macro level_info(value) %} + 难度: + {% if value == 'entry' %} + 入门 + {% elseif value == 'junior' %} + 初级 + {% elseif value == 'medium' %} + 中级 + {% elseif value == 'senior' %} + 高级 + {% endif %} + +{%- endmacro %} + {%- macro category_info(category) %} {% if category %} 分类:{{ category.name }} @@ -60,7 +74,7 @@

标题:{{ item.title }} {{ model_info(item.model) }}

-

{{ category_info(item.category) }}  {{ teacher_info(item.teacher) }}

+

{{ category_info(item.category) }}  {{ teacher_info(item.teacher) }}  {{ level_info(item.level) }}

diff --git a/app/Http/Web/Controllers/ChapterController.php b/app/Http/Web/Controllers/ChapterController.php index a76bc088..c28f8bd1 100644 --- a/app/Http/Web/Controllers/ChapterController.php +++ b/app/Http/Web/Controllers/ChapterController.php @@ -2,7 +2,10 @@ namespace App\Http\Web\Controllers; -use App\Http\Web\Services\Chapter as ChapterService; +use App\Services\Frontend\Chapter\AgreeVote as ChapterAgreeVoteService; +use App\Services\Frontend\Chapter\ChapterInfo as ChapterInfoService; +use App\Services\Frontend\Chapter\CommentList as ChapterCommentListService; +use App\Services\Frontend\Chapter\OpposeVote as ChapterOpposeVoteService; /** * @RoutePrefix("/chapter") @@ -15,9 +18,9 @@ class ChapterController extends Controller */ public function showAction($id) { - $service = new ChapterService(); + $service = new ChapterInfoService(); - $chapter = $service->getChapter($id); + $chapter = $service->handle($id); $this->view->chapter = $chapter; } @@ -27,11 +30,11 @@ class ChapterController extends Controller */ public function commentsAction($id) { - $service = new ChapterService(); + $service = new ChapterCommentListService(); - $comments = $service->getComments($id); + $comments = $service->handle($id); - $this->view->comments = $comments; + return $this->jsonSuccess(['comments' => $comments]); } /** @@ -39,11 +42,11 @@ class ChapterController extends Controller */ public function agreeAction($id) { - $service = new ChapterService(); + $service = new ChapterAgreeVoteService(); - $service->agree($id); + $service->handle($id); - return $this->response->ajaxSuccess(); + return $this->jsonSuccess(); } /** @@ -51,35 +54,11 @@ class ChapterController extends Controller */ public function opposeAction($id) { - $service = new ChapterService(); + $service = new ChapterOpposeVoteService(); - $service->oppose($id); + $service->handle($id); - return $this->response->ajaxSuccess(); - } - - /** - * @Post("/{id:[0-9]+}/position", name="web.chapter.position") - */ - public function positionAction($id) - { - $service = new ChapterService(); - - $service->position($id); - - return $this->response->ajaxSuccess(); - } - - /** - * @Post("/{id:[0-9]+}/finish", name="web.chapter.finish") - */ - public function finishAction($id) - { - $service = new ChapterService(); - - $service->finish($id); - - return $this->response->ajaxSuccess(); + return $this->jsonSuccess(); } } diff --git a/app/Http/Web/Controllers/CommentController.php b/app/Http/Web/Controllers/CommentController.php new file mode 100644 index 00000000..a3d417de --- /dev/null +++ b/app/Http/Web/Controllers/CommentController.php @@ -0,0 +1,94 @@ +handle($id); + + return $this->jsonSuccess(['comment' => $comment]); + } + + /** + * @Post("/create", name="web.comment.create") + */ + public function createAction() + { + $service = new CommentCreateService(); + + $comment = $service->handle(); + + $service = new CommentInfoService(); + + $comment = $service->handle($comment->id); + + return $this->jsonSuccess(['comment' => $comment]); + } + + /** + * @Post("/{id:[0-9]+}/update", name="web.comment.update") + */ + public function updateAction($id) + { + $service = new CommentUpdateService(); + + $comment = $service->handle($id); + + return $this->jsonSuccess(['comment' => $comment]); + } + + /** + * @Post("/{id:[0-9]+}/delete", name="web.comment.delete") + */ + public function deleteAction($id) + { + $service = new CommentDeleteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/agree", name="web.comment.agree") + */ + public function agreeAction($id) + { + $service = new CommentAgreeVoteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/oppose", name="web.comment.oppose") + */ + public function opposeAction($id) + { + $service = new CommentOpposeVoteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Web/Controllers/ConsultController.php b/app/Http/Web/Controllers/ConsultController.php new file mode 100644 index 00000000..2795599a --- /dev/null +++ b/app/Http/Web/Controllers/ConsultController.php @@ -0,0 +1,94 @@ +handle($id); + + return $this->jsonSuccess(['consult' => $consult]); + } + + /** + * @Post("/create", name="web.consult.create") + */ + public function createAction() + { + $service = new ConsultCreateService(); + + $consult = $service->handle(); + + $service = new ConsultInfoService(); + + $consult = $service->handle($consult->id); + + return $this->jsonSuccess(['consult' => $consult]); + } + + /** + * @Post("/{id:[0-9]+}/update", name="web.consult.update") + */ + public function updateAction($id) + { + $service = new ConsultUpdateService(); + + $consult = $service->handle($id); + + return $this->jsonSuccess(['consult' => $consult]); + } + + /** + * @Post("/{id:[0-9]+}/delete", name="web.consult.delete") + */ + public function deleteAction($id) + { + $service = new ConsultDeleteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/agree", name="web.consult.agree") + */ + public function agreeAction($id) + { + $service = new ConsultAgreeVoteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/oppose", name="web.consult.oppose") + */ + public function opposeAction($id) + { + $service = new ConsultOpposeVoteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Web/Controllers/CourseController.php b/app/Http/Web/Controllers/CourseController.php index a5015f9c..3b70baad 100644 --- a/app/Http/Web/Controllers/CourseController.php +++ b/app/Http/Web/Controllers/CourseController.php @@ -139,7 +139,7 @@ class CourseController extends Controller $pager = $consultListService->handle($id); - $this->view->setVar('pager', $pager); + return $this->jsonPaginate($pager); } /** @@ -151,7 +151,7 @@ class CourseController extends Controller $pager = $reviewListService->handle($id); - $this->view->setVar('pager', $pager); + return $this->jsonPaginate($pager); } /** diff --git a/app/Http/Web/Controllers/MyController.php b/app/Http/Web/Controllers/MyController.php index a27c3937..dd4a51a5 100644 --- a/app/Http/Web/Controllers/MyController.php +++ b/app/Http/Web/Controllers/MyController.php @@ -2,7 +2,12 @@ namespace App\Http\Web\Controllers; -use App\Http\Web\Services\My as MyService; +use App\Services\Frontend\My\ConsultList as MyConsultListService; +use App\Services\Frontend\My\CourseList as MyCourseListService; +use App\Services\Frontend\My\FavoriteList as MyFavoriteListService; +use App\Services\Frontend\My\OrderList as MyOrderListService; +use App\Services\Frontend\My\RefundList as MyRefundListService; +use App\Services\Frontend\My\ReviewList as MyReviewListService; /** * @RoutePrefix("/my") @@ -15,13 +20,23 @@ class MyController extends Controller */ public function coursesAction() { - $service = new MyService(); + $service = new MyCourseListService(); - $courses = $service->getCourses(); - - var_dump($courses);exit; + $pager = $service->handle(); - $this->view->courses = $courses; + $this->view->setVar('pager', $pager); + } + + /** + * @Get("/favorites", name="web.my.favorites") + */ + public function favoritesAction() + { + $service = new MyFavoriteListService(); + + $pager = $service->handle(); + + $this->view->setVar('pager', $pager); } /** @@ -29,11 +44,11 @@ class MyController extends Controller */ public function consultsAction() { - $service = new MyService(); + $service = new MyConsultListService(); - $consults = $service->getConsults(); + $pager = $service->handle(); - $this->view->consults = $consults; + $this->view->setVar('pager', $pager); } /** @@ -41,11 +56,11 @@ class MyController extends Controller */ public function reviewsAction() { - $service = new MyService(); + $service = new MyReviewListService(); - $reviews = $service->getReviews(); + $pager = $service->handle(); - $this->view->reviews = $reviews; + $this->view->setVar('pager', $pager); } /** @@ -53,33 +68,23 @@ class MyController extends Controller */ public function ordersAction() { - $service = new MyService(); + $service = new MyOrderListService(); - $orders = $service->getOrders(); + $pager = $service->handle(); - $this->view->orders = $orders; - - return $this->jsonSuccess($orders); + $this->view->setVar('pager', $pager); } /** - * @Get("/coupons", name="web.my.coupons") + * @Get("/refunds", name="web.my.refunds") */ - public function couponsAction() + public function refundsAction() { - $service = new MyService(); + $service = new MyRefundListService(); - $coupons = $service->getCoupons(); + $pager = $service->handle(); - $this->view->coupons = $coupons; - } - - /** - * @Get("/balance", name="web.my.balance") - */ - public function balanceAction() - { - + $this->view->setVar('pager', $pager); } } diff --git a/app/Http/Web/Controllers/OrderController.php b/app/Http/Web/Controllers/OrderController.php index 06a030dc..94726974 100644 --- a/app/Http/Web/Controllers/OrderController.php +++ b/app/Http/Web/Controllers/OrderController.php @@ -2,9 +2,6 @@ namespace App\Http\Web\Controllers; -use App\Models\Order as OrderModel; -use Home\Services\Order as OrderService; - /** * @RoutePrefix("/order") */ @@ -12,43 +9,11 @@ class OrderController extends Controller { /** - * @Post("/confirm", name="web.order.confirm") + * @Get("/confirm", name="web.order.confirm") */ public function confirmAction() { - $itemType = $this->request->get('item_type'); - $itemId = $this->request->get('item_id'); - $service = new OrderService(); - - switch ($itemType) { - - case OrderModel::ITEM_ITEM_COURSE: - - $course = $service->getCourse($itemId); - - $this->view->course = $course; - - break; - - case OrderModel::ITEM_ITEM_PACKAGE: - - $package = $service->getPackage($itemId); - $courses = $service->getPackageCourses($itemId); - - $this->view->package = $package; - $this->view->courses = $courses; - - break; - - case OrderModel::ITEM_ITEM_REWARD: - - $course = $service->getCourse($itemId); - - $this->view->course = $course; - - break; - } } /** @@ -56,11 +21,7 @@ class OrderController extends Controller */ public function createAction() { - $service = new OrderService(); - $order = $service->create(); - - return $this->response->ajaxSuccess($order); } /** @@ -68,17 +29,7 @@ class OrderController extends Controller */ public function cashierAction() { - $service = new OrderService(); - $tradeNo = $this->request->getQuery('trade_no'); - - $order = $service->getOrder($tradeNo); - $orderItems = $service->getOrderItems($order->id); - - $this->view->order = $order; - $this->view->orderItems = $orderItems; - - return $this->jsonSuccess($order->toArray()); } /** @@ -86,19 +37,7 @@ class OrderController extends Controller */ public function payAction() { - $service = new OrderService(); - $tradeNo = $this->request->getPost('trade_no'); - $payChannel = $this->request->getPost('pay_channel'); - - $order = $service->getOrder($tradeNo); - - $qrCodeText = $service->qrCode($tradeNo, $payChannel); - - //$qrCodeUrl = "http://qr.liantu.com/api.php?text={$qrCodeText}"; - - $this->view->order = $order; - $this->view->qrCodeText = $qrCodeText; } /** @@ -106,9 +45,7 @@ class OrderController extends Controller */ public function notifyAction($channel) { - $service = new OrderService(); - $service->notify($channel); } /** @@ -116,15 +53,7 @@ class OrderController extends Controller */ public function statusAction() { - $service = new OrderService(); - $tradeNo = $this->request->getPost('trade_no'); - - $order = $service->getOrder($tradeNo); - - $this->response->ajaxSuccess([ - 'status' => $order->status - ]); } /** @@ -132,11 +61,7 @@ class OrderController extends Controller */ public function cancelAction() { - $service = new OrderService(); - $order = $service->cancel(); - - return $this->jsonSuccess($order->toArray()); } } diff --git a/app/Http/Web/Controllers/PackageController.php b/app/Http/Web/Controllers/PackageController.php new file mode 100644 index 00000000..d819138e --- /dev/null +++ b/app/Http/Web/Controllers/PackageController.php @@ -0,0 +1,38 @@ +handle($id); + + return $this->jsonSuccess(['package' => $package]); + } + + /** + * @Get("/{id:[0-9]+}/courses", name="web.package.courses") + */ + public function coursesAction($id) + { + $service = new PackageCourseListService(); + + $courses = $service->handle($id); + + return $this->jsonSuccess(['courses' => $courses]); + } + +} diff --git a/app/Http/Web/Controllers/ReviewController.php b/app/Http/Web/Controllers/ReviewController.php index ca05ce10..e706a30e 100644 --- a/app/Http/Web/Controllers/ReviewController.php +++ b/app/Http/Web/Controllers/ReviewController.php @@ -2,7 +2,12 @@ namespace App\Http\Web\Controllers; -use App\Http\Web\Services\Review as ReviewService; +use App\Services\Frontend\Review\AgreeVote as ReviewAgreeVoteService; +use App\Services\Frontend\Review\OpposeVote as ReviewOpposeVoteService; +use App\Services\Frontend\Review\ReviewCreate as ReviewCreateService; +use App\Services\Frontend\Review\ReviewDelete as ReviewDeleteService; +use App\Services\Frontend\Review\ReviewInfo as ReviewInfoService; +use App\Services\Frontend\Review\ReviewUpdate as ReviewUpdateService; /** * @RoutePrefix("/review") @@ -10,30 +15,32 @@ use App\Http\Web\Services\Review as ReviewService; class ReviewController extends Controller { + /** + * @Get("/{id:[0-9]+}/info", name="web.review.info") + */ + public function infoAction($id) + { + $service = new ReviewInfoService(); + + $review = $service->handle($id); + + return $this->jsonSuccess(['review' => $review]); + } + /** * @Post("/create", name="web.review.create") */ public function createAction() { - $service = new ReviewService(); + $service = new ReviewCreateService(); - $review = $service->create(); + $review = $service->handle(); - $data = $service->getReview($review->id); + $service = new ReviewInfoService(); - return $this->jsonSuccess($data); - } + $review = $service->handle($review->id); - /** - * @Get("/{id:[0-9]+}", name="web.review.show") - */ - public function showAction($id) - { - $service = new ReviewService(); - - $review = $service->getReview($id); - - return $this->response->ajaxSuccess($review); + return $this->jsonSuccess(['review' => $review]); } /** @@ -41,13 +48,11 @@ class ReviewController extends Controller */ public function updateAction($id) { - $service = new ReviewService(); + $service = new ReviewUpdateService(); - $review = $service->update($id); + $review = $service->handle($id); - $data = $service->getReview($review->id); - - return $this->response->ajaxSuccess($data); + return $this->jsonSuccess(['review' => $review]); } /** @@ -55,11 +60,11 @@ class ReviewController extends Controller */ public function deleteAction($id) { - $service = new ReviewService(); + $service = new ReviewDeleteService(); - $service->delete($id); + $service->handle($id); - return $this->response->ajaxSuccess(); + return $this->jsonSuccess(); } /** @@ -67,11 +72,11 @@ class ReviewController extends Controller */ public function agreeAction($id) { - $service = new ReviewService(); + $service = new ReviewAgreeVoteService(); - $service->agree($id); + $service->handle($id); - return $this->response->ajaxSuccess(); + return $this->jsonSuccess(); } /** @@ -79,23 +84,11 @@ class ReviewController extends Controller */ public function opposeAction($id) { - $service = new ReviewService(); + $service = new ReviewOpposeVoteService(); - $service->oppose($id); + $service->handle($id); - return $this->response->ajaxSuccess(); - } - - /** - * @Post("/{id:[0-9]+}/reply", name="web.review.reply") - */ - public function replyAction($id) - { - $service = new ReviewService(); - - $service->reply($id); - - return $this->response->ajaxSuccess(); + return $this->jsonSuccess(); } } diff --git a/app/Http/Web/Controllers/TopicController.php b/app/Http/Web/Controllers/TopicController.php new file mode 100644 index 00000000..63c7a8f8 --- /dev/null +++ b/app/Http/Web/Controllers/TopicController.php @@ -0,0 +1,38 @@ +handle($id); + + return $this->jsonSuccess(['topic' => $topic]); + } + + /** + * @Get("/{id:[0-9]+}/courses", name="web.topic.courses") + */ + public function coursesAction($id) + { + $service = new TopicCourseListService(); + + $courses = $service->handle($id); + + return $this->jsonSuccess(['courses' => $courses]); + } + +} diff --git a/app/Http/Web/Controllers/UserController.php b/app/Http/Web/Controllers/UserController.php index 0ebd66de..36e78f04 100644 --- a/app/Http/Web/Controllers/UserController.php +++ b/app/Http/Web/Controllers/UserController.php @@ -2,6 +2,9 @@ namespace App\Http\Web\Controllers; +use App\Services\Frontend\User\CourseList as UserCourseListService; +use App\Services\Frontend\User\UserInfo as UserInfoService; + /** * @RoutePrefix("/user") */ @@ -13,7 +16,11 @@ class UserController extends Controller */ public function showAction($id) { - + $service = new UserInfoService(); + + $user = $service->handle($id); + + $this->view->setVar('user', $user); } /** @@ -21,15 +28,11 @@ class UserController extends Controller */ public function coursesAction($id) { - - } + $service = new UserCourseListService(); - /** - * @Post("/{id:[0-9]+}/message", name="web.user.message") - */ - public function messageAction($id) - { - + $courses = $service->handle($id); + + return $this->jsonSuccess(['courses' => $courses]); } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 504e268c..cae63993 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -149,7 +149,9 @@ class Order extends Model public function beforeCreate() { $this->status = self::STATUS_PENDING; + $this->sn = date('YmdHis') . rand(1000, 9999); + $this->create_time = time(); if (is_array($this->item_info) && !empty($this->item_info)) { diff --git a/app/Models/Refund.php b/app/Models/Refund.php index 2a728912..dae692d1 100644 --- a/app/Models/Refund.php +++ b/app/Models/Refund.php @@ -128,7 +128,9 @@ class Refund extends Model public function beforeCreate() { $this->status = self::STATUS_PENDING; + $this->sn = date('YmdHis') . rand(1000, 9999); + $this->create_time = time(); } diff --git a/app/Models/Review.php b/app/Models/Review.php index f2d6a811..e17bddf4 100644 --- a/app/Models/Review.php +++ b/app/Models/Review.php @@ -28,6 +28,20 @@ class Review extends Model */ public $user_id; + /** + * 评价内容 + * + * @var string + */ + public $content; + + /** + * 回复内容 + * + * @var string + */ + public $reply; + /** * 课程评分 * @@ -36,11 +50,18 @@ class Review extends Model public $rating; /** - * 评价内容 - * - * @var string + * 赞同数量 + * + * @var int */ - public $content; + public $agree_count; + + /** + * 反对数量 + * + * @var int + */ + public $oppose_count; /** * 发布标识 diff --git a/app/Models/Trade.php b/app/Models/Trade.php index 531bd406..6db424d8 100644 --- a/app/Models/Trade.php +++ b/app/Models/Trade.php @@ -125,7 +125,9 @@ class Trade extends Model public function beforeCreate() { $this->status = self::STATUS_PENDING; + $this->sn = date('YmdHis') . rand(1000, 9999); + $this->create_time = time(); } diff --git a/app/Providers/Response.php b/app/Providers/Response.php index 2680930f..ed8f763f 100644 --- a/app/Providers/Response.php +++ b/app/Providers/Response.php @@ -7,7 +7,7 @@ use App\Library\Http\Response as MyResponse; class Response extends Provider { - protected $serviceName = 'view'; + protected $serviceName = 'response'; public function register() { diff --git a/app/Repos/Slide.php b/app/Repos/Slide.php index 4c9e568b..4c96ce0f 100644 --- a/app/Repos/Slide.php +++ b/app/Repos/Slide.php @@ -70,18 +70,4 @@ class Slide extends Repository ->execute(); } - /** - * @param int $limit - * @return ResultsetInterface|Resultset|SlideModel[] - */ - public function findTopSlides($limit = 5) - { - return SlideModel::query() - ->andWhere('published = :published:', ['published' => 1]) - ->andWhere('deleted = :deleted:', ['deleted' => 0]) - ->orderBy('priority ASC') - ->limit($limit) - ->execute(); - } - } diff --git a/app/Services/Frontend/Chapter/ChapterInfo.php b/app/Services/Frontend/Chapter/ChapterInfo.php index 513efee8..fec7afa9 100644 --- a/app/Services/Frontend/Chapter/ChapterInfo.php +++ b/app/Services/Frontend/Chapter/ChapterInfo.php @@ -65,8 +65,11 @@ class ChapterInfo extends Service $me['owned'] = $this->ownedChapter; if ($user->id > 0) { + $chapterVoteRepo = new ChapterVoteRepo(); + $chapterVote = $chapterVoteRepo->findChapterVote($chapter->id, $user->id); + if ($chapterVote) { $me['agreed'] = $chapterVote->type == ChapterVoteModel::TYPE_AGREE ? 1 : 0; $me['opposed'] = $chapterVote->type == ChapterVoteModel::TYPE_OPPOSE ? 1 : 0; @@ -103,13 +106,10 @@ class ChapterInfo extends Service $playUrls = $chapterVodService->getPlayUrls($chapter->id); - $course = $this->formatCourse($this->course); - return [ 'id' => $chapter->id, 'title' => $chapter->title, 'summary' => $chapter->summary, - 'course' => $course, 'play_urls' => $playUrls, 'user_count' => $chapter->user_count, 'agree_count' => $chapter->agree_count, @@ -132,8 +132,6 @@ class ChapterInfo extends Service $playUrls = $liveService->getPullUrls($stream, $format); - $course = $this->formatCourse($this->course); - $chapterRepo = new ChapterRepo(); $live = $chapterRepo->findChapterLive($chapter->id); @@ -142,7 +140,6 @@ class ChapterInfo extends Service 'id' => $chapter->id, 'title' => $chapter->title, 'summary' => $chapter->summary, - 'course' => $course, 'play_urls' => $playUrls, 'start_time' => $live->start_time, 'end_time' => $live->end_time, @@ -159,13 +156,10 @@ class ChapterInfo extends Service $read = $chapterRepo->findChapterRead($chapter->id); - $course = $this->formatCourse($this->course); - return [ 'id' => $chapter->id, 'title' => $chapter->title, 'summary' => $chapter->summary, - 'course' => $course, 'content' => $read->content, 'user_count' => $chapter->user_count, 'agree_count' => $chapter->agree_count, @@ -174,17 +168,9 @@ class ChapterInfo extends Service ]; } - protected function formatCourse(CourseModel $course) - { - return [ - 'id' => $course->id, - 'title' => $course->title, - ]; - } - protected function handleCourseUser(CourseModel $course, UserModel $user) { - if ($user->id == 0) return; + if (empty($user->id)) return; if ($this->joinedCourse) return; @@ -205,7 +191,7 @@ class ChapterInfo extends Service protected function handleChapterUser(ChapterModel $chapter, UserModel $user) { - if ($user->id == 0) return; + if (empty($user->id)) return; if ($this->joinedChapter) return; diff --git a/app/Services/Frontend/Chapter/CommentList.php b/app/Services/Frontend/Chapter/CommentList.php index 8676642d..246fd09c 100644 --- a/app/Services/Frontend/Chapter/CommentList.php +++ b/app/Services/Frontend/Chapter/CommentList.php @@ -64,13 +64,13 @@ class CommentList extends Service $users = $builder->getUsers($comments); - $votes = $this->getCommentVotes($this->chapter->id, $this->user->id); + $votes = $this->getCommentVotes($this->chapter, $this->user); $items = []; foreach ($comments as $comment) { - $user = $users[$comment['user_id']] ?? []; + $user = $users[$comment['user_id']] ?? new \stdClass(); $comment['mentions'] = $comment['mentions'] ? json_decode($comment['mentions']) : []; @@ -97,15 +97,15 @@ class CommentList extends Service return $pager; } - protected function getCommentVotes($chapterId, $userId) + protected function getCommentVotes(ChapterModel $chapter, UserModel $user) { - if (!$chapterId || !$userId) { + if ($chapter->id == 0 || $user->id == 0) { return []; } $chapterRepo = new ChapterRepo(); - $votes = $chapterRepo->findUserCommentVotes($chapterId, $userId); + $votes = $chapterRepo->findUserCommentVotes($chapter->id, $user->id); if ($votes->count() == 0) { return []; diff --git a/app/Services/Frontend/Comment/CommentCreate.php b/app/Services/Frontend/Comment/CommentCreate.php index 8838a340..d0350667 100644 --- a/app/Services/Frontend/Comment/CommentCreate.php +++ b/app/Services/Frontend/Comment/CommentCreate.php @@ -23,16 +23,16 @@ class CommentCreate extends Service $user = $this->getLoginUser(); + $chapter = $this->checkChapter($post['chapter_id']); + + $course = $this->checkCourse($chapter->course_id); + $validator = new UserDailyLimitValidator(); $validator->checkCommentLimit($user); $validator = new CommentValidator(); - $chapter = $this->checkChapterCache($post['chapter_id']); - - $course = $this->checkCourseCache($chapter->course_id); - $data = []; $data['content'] = $validator->checkContent($post['content']); @@ -59,6 +59,8 @@ class CommentCreate extends Service $this->incrCourseCommentCount($course); $this->incrUserDailyCommentCount($user); + + return $comment; } protected function handleMentions($mentions) diff --git a/app/Services/Frontend/Comment/CommentDelete.php b/app/Services/Frontend/Comment/CommentDelete.php index 9dd3250c..a85cd191 100644 --- a/app/Services/Frontend/Comment/CommentDelete.php +++ b/app/Services/Frontend/Comment/CommentDelete.php @@ -19,22 +19,20 @@ class CommentDelete extends Service { $comment = $this->checkComment($id); + $chapter = $this->checkChapter($comment->chapter_id); + + $course = $this->checkCourse($comment->course_id); + $user = $this->getLoginUser(); $validator = new CommentValidator(); $validator->checkOwner($user->id, $comment->user_id); - $comment->deleted = 1; - - $comment->update(); - - $chapter = $this->checkChapterCache($comment->chapter_id); + $comment->delete(); $this->decrChapterCommentCount($chapter); - $course = $this->checkCourseCache($comment->course_id); - $this->decrCourseCommentCount($course); } diff --git a/app/Services/Frontend/Comment/CommentInfo.php b/app/Services/Frontend/Comment/CommentInfo.php new file mode 100644 index 00000000..a8fb2cab --- /dev/null +++ b/app/Services/Frontend/Comment/CommentInfo.php @@ -0,0 +1,71 @@ +checkComment($id); + + $user = $this->getCurrentUser(); + + return $this->handleComment($comment, $user); + } + + protected function handleComment(CommentModel $comment, UserModel $user) + { + $result = [ + 'id' => $comment->id, + 'content' => $comment->content, + 'mentions' => $comment->mentions, + 'agree_count' => $comment->agree_count, + 'oppose_count' => $comment->oppose_count, + 'create_time' => $comment->create_time, + 'update_time' => $comment->update_time, + ]; + + $me = [ + 'agreed' => 0, + 'opposed' => 0, + ]; + + if ($user->id > 0) { + + $voteRepo = new CommentVoteRepo(); + + $vote = $voteRepo->findCommentVote($comment->id, $user->id); + + if ($vote) { + $me['agreed'] = $vote->type == CommentVoteModel::TYPE_AGREE ? 1 : 0; + $me['opposed'] = $vote->type == CommentVoteModel::TYPE_OPPOSE ? 1 : 0; + } + } + + $userRepo = new UserRepo(); + + $owner = $userRepo->findById($comment->user_id); + + $result['owner'] = [ + 'id' => $owner->id, + 'name' => $owner->name, + 'avatar' => $owner->avatar, + ]; + + $result['me'] = $me; + + return $result; + } + +} diff --git a/app/Services/Frontend/Comment/CommentUpdate.php b/app/Services/Frontend/Comment/CommentUpdate.php new file mode 100644 index 00000000..7a694b08 --- /dev/null +++ b/app/Services/Frontend/Comment/CommentUpdate.php @@ -0,0 +1,42 @@ +request->getPost(); + + $user = $this->getLoginUser(); + + $comment = $this->checkComment($id); + + $validator = new CommentValidator(); + + $validator->checkOwner($user->id, $comment->user_id); + + $data = []; + + $data['content'] = $validator->checkContent($post['content']); + + if (isset($post['mentions'])) { + $data['mentions'] = $validator->checkMentions($post['mentions']); + } + + $comment->update($data); + } + + protected function handleMentions($mentions) + { + + } + +} diff --git a/app/Services/Frontend/Consult/AgreeVote.php b/app/Services/Frontend/Consult/AgreeVote.php index 050dca52..9ad136e8 100644 --- a/app/Services/Frontend/Consult/AgreeVote.php +++ b/app/Services/Frontend/Consult/AgreeVote.php @@ -13,7 +13,7 @@ class AgreeVote extends Service use ConsultTrait, VoteTrait; - public function handleAgreeVote($id) + public function handle($id) { $consult = $this->checkConsult($id); diff --git a/app/Services/Frontend/Consult/ConsultDelete.php b/app/Services/Frontend/Consult/ConsultDelete.php new file mode 100644 index 00000000..17778841 --- /dev/null +++ b/app/Services/Frontend/Consult/ConsultDelete.php @@ -0,0 +1,38 @@ +checkConsult($id); + + $course = $this->checkCourse($consult->course_id); + + $user = $this->getLoginUser(); + + $validator = new ConsultValidator(); + + $validator->checkOwner($user->id, $consult->user_id); + + $consult->delete(); + + $this->decrCourseConsultCount($course); + } + + protected function decrCourseConsultCount(CourseModel $course) + { + $this->eventsManager->fire('courseCounter:decrConsultCount', $this, $course); + } + +} diff --git a/app/Services/Frontend/Consult/ConsultInfo.php b/app/Services/Frontend/Consult/ConsultInfo.php new file mode 100644 index 00000000..1315e656 --- /dev/null +++ b/app/Services/Frontend/Consult/ConsultInfo.php @@ -0,0 +1,71 @@ +checkConsult($id); + + $user = $this->getCurrentUser(); + + return $this->handleConsult($consult, $user); + } + + protected function handleConsult(ConsultModel $consult, UserModel $user) + { + $result = [ + 'id' => $consult->id, + 'question' => $consult->question, + 'answer' => $consult->answer, + 'agree_count' => $consult->agree_count, + 'oppose_count' => $consult->oppose_count, + 'create_time' => $consult->create_time, + 'update_time' => $consult->update_time, + ]; + + $me = [ + 'agreed' => 0, + 'opposed' => 0, + ]; + + if ($user->id > 0) { + + $voteRepo = new ConsultVoteRepo(); + + $vote = $voteRepo->findConsultVote($consult->id, $user->id); + + if ($vote) { + $me['agreed'] = $vote->type == ConsultVoteModel::TYPE_AGREE ? 1 : 0; + $me['opposed'] = $vote->type == ConsultVoteModel::TYPE_OPPOSE ? 1 : 0; + } + } + + $userRepo = new UserRepo(); + + $owner = $userRepo->findById($consult->user_id); + + $result['owner'] = [ + 'id' => $owner->id, + 'name' => $owner->name, + 'avatar' => $owner->avatar, + ]; + + $result['me'] = $me; + + return $result; + } + +} diff --git a/app/Services/Frontend/Consult/ConsultUpdate.php b/app/Services/Frontend/Consult/ConsultUpdate.php new file mode 100644 index 00000000..cfb1a538 --- /dev/null +++ b/app/Services/Frontend/Consult/ConsultUpdate.php @@ -0,0 +1,36 @@ +request->getPost(); + + $user = $this->getLoginUser(); + + $consult = $this->checkConsult($id); + + $validator = new ConsultValidator(); + + $validator->checkOwner($user->id, $consult->user_id); + + $question = $validator->checkQuestion($post['question']); + + $consult->question = $question; + + $consult->update(); + + return $consult; + } + +} diff --git a/app/Services/Frontend/Course/ChapterList.php b/app/Services/Frontend/Course/ChapterList.php index 9e6e1874..55cefe66 100644 --- a/app/Services/Frontend/Course/ChapterList.php +++ b/app/Services/Frontend/Course/ChapterList.php @@ -45,12 +45,12 @@ class ChapterList extends Service } } } else { - $mapping = $this->getLearningMapping($course, $user); + $mappings = $this->getLearningMappings($course, $user); foreach ($chapters as &$chapter) { foreach ($chapter['children'] as &$lesson) { $lesson['me'] = [ 'owned' => $this->ownedCourse || $lesson['free'] ? 1 : 0, - 'progress' => $mapping[$lesson['id']]['progress'] ?? 0, + 'progress' => $mappings[$lesson['id']]['progress'] ?? 0, ]; } } @@ -59,7 +59,7 @@ class ChapterList extends Service return $chapters; } - protected function getLearningMapping(CourseModel $course, UserModel $user) + protected function getLearningMappings(CourseModel $course, UserModel $user) { $courseRepo = new CourseRepo(); @@ -69,15 +69,15 @@ class ChapterList extends Service return []; } - $mapping = []; + $mappings = []; foreach ($userLearnings as $learning) { - $mapping[$learning['chapter_id']] = [ + $mappings[$learning['chapter_id']] = [ 'progress' => $learning['progress'], ]; } - return $mapping; + return $mappings; } } diff --git a/app/Services/Frontend/Course/ConsultList.php b/app/Services/Frontend/Course/ConsultList.php index ec304b34..e6483e9e 100644 --- a/app/Services/Frontend/Course/ConsultList.php +++ b/app/Services/Frontend/Course/ConsultList.php @@ -70,7 +70,7 @@ class ConsultList extends Service foreach ($consults as $consult) { - $user = $users[$consult['user_id']] ?? []; + $user = $users[$consult['user_id']] ?? new \stdClass(); $me = [ 'agreed' => $votes[$consult['id']]['agreed'] ?? 0, @@ -96,7 +96,7 @@ class ConsultList extends Service protected function getConsultVotes(CourseModel $course, UserModel $user) { - if ($course->id == 0 || !$user->id == 0) { + if ($course->id == 0 || $user->id == 0) { return []; } diff --git a/app/Services/Frontend/Course/ReviewList.php b/app/Services/Frontend/Course/ReviewList.php index ef1f31a9..e1b3048e 100644 --- a/app/Services/Frontend/Course/ReviewList.php +++ b/app/Services/Frontend/Course/ReviewList.php @@ -70,7 +70,7 @@ class ReviewList extends Service foreach ($reviews as $review) { - $user = $users[$review['user_id']] ?? []; + $user = $users[$review['user_id']] ?? new \stdClass(); $me = [ 'agreed' => $votes[$review['id']]['agreed'] ?? 0, diff --git a/app/Services/Frontend/My/ConsultList.php b/app/Services/Frontend/My/ConsultList.php index e960d60a..66070487 100644 --- a/app/Services/Frontend/My/ConsultList.php +++ b/app/Services/Frontend/My/ConsultList.php @@ -13,7 +13,7 @@ class ConsultList extends Service use UserTrait; - public function getConsults() + public function handle() { $user = $this->getLoginUser(); @@ -60,6 +60,7 @@ class ConsultList extends Service 'agree_count' => $consult['agree_count'], 'oppose_count' => $consult['oppose_count'], 'create_time' => $consult['create_time'], + 'update_time' => $consult['update_time'], 'course' => $course, ]; } diff --git a/app/Services/Frontend/My/CourseList.php b/app/Services/Frontend/My/CourseList.php index f3884ea3..7e95f84c 100644 --- a/app/Services/Frontend/My/CourseList.php +++ b/app/Services/Frontend/My/CourseList.php @@ -14,9 +14,9 @@ class CourseList extends Service use UserTrait; - public function getCourses($id) + public function handle() { - $user = $this->checkUser($id); + $user = $this->getLoginUser(); $pagerQuery = new PagerQuery(); @@ -53,7 +53,7 @@ class CourseList extends Service foreach ($relations as $relation) { - $course = $courses[$relation['course_id']] ?? []; + $course = $courses[$relation['course_id']] ?? new \stdClass(); $items = [ 'course' => $course, diff --git a/app/Services/Frontend/My/FavoriteList.php b/app/Services/Frontend/My/FavoriteList.php index 3773cf61..71b7fc09 100644 --- a/app/Services/Frontend/My/FavoriteList.php +++ b/app/Services/Frontend/My/FavoriteList.php @@ -13,9 +13,9 @@ class FavoriteList extends Service use UserTrait; - public function getCourses($id) + public function handle() { - $user = $this->checkUser($id); + $user = $this->getLoginUser(); $pagerQuery = new PagerQuery(); @@ -28,9 +28,9 @@ class FavoriteList extends Service $page = $pagerQuery->getPage(); $limit = $pagerQuery->getLimit(); - $courseFavoriteRepo = new CourseFavoriteRepo(); + $favoriteRepo = new CourseFavoriteRepo(); - $pager = $courseFavoriteRepo->paginate($params, $sort, $page, $limit); + $pager = $favoriteRepo->paginate($params, $sort, $page, $limit); return $this->handleCourses($pager); } @@ -51,7 +51,7 @@ class FavoriteList extends Service foreach ($relations as $relation) { - $course = $courses[$relation['course_id']] ?? []; + $course = $courses[$relation['course_id']] ?? new \stdClass(); $items[] = $course; } diff --git a/app/Services/Frontend/My/OrderList.php b/app/Services/Frontend/My/OrderList.php index d46baf4c..0a314de9 100644 --- a/app/Services/Frontend/My/OrderList.php +++ b/app/Services/Frontend/My/OrderList.php @@ -13,7 +13,7 @@ class OrderList extends Service use UserTrait; - public function getUserOrders() + public function handle() { $user = $this->getLoginUser(); @@ -32,10 +32,10 @@ class OrderList extends Service $pager = $orderRepo->paginate($params, $sort, $page, $limit); - return $this->handleUserOrders($pager); + return $this->handleOrders($pager); } - public function handleUserOrders($pager) + public function handleOrders($pager) { if ($pager->total_items == 0) { return $pager; @@ -55,11 +55,11 @@ class OrderList extends Service 'sn' => $order['sn'], 'subject' => $order['subject'], 'amount' => $order['amount'], + 'status' => $order['status'], 'item_id' => $order['item_id'], 'item_type' => $order['item_type'], 'item_info' => $order['item_info'], 'source_type' => $order['source_type'], - 'status' => $order['status'], 'create_time' => $order['create_time'], ]; } diff --git a/app/Services/Frontend/My/RefundList.php b/app/Services/Frontend/My/RefundList.php index 9d427733..d12baaea 100644 --- a/app/Services/Frontend/My/RefundList.php +++ b/app/Services/Frontend/My/RefundList.php @@ -13,7 +13,7 @@ class RefundList extends Service use UserTrait; - public function getRefunds() + public function handle() { $user = $this->getLoginUser(); @@ -38,7 +38,6 @@ class RefundList extends Service protected function handleRefunds($pager) { if ($pager->total_items == 0) { - $pager->items = []; return $pager; } @@ -52,7 +51,7 @@ class RefundList extends Service foreach ($refunds as $refund) { - $order = $orders[$refund['order_id']] ?? []; + $order = $orders[$refund['order_id']] ?? new \stdClass(); $items[] = [ 'order' => $order, @@ -60,7 +59,7 @@ class RefundList extends Service 'status' => $refund['status'], 'apply_note' => $refund['apply_note'], 'review_note' => $refund['review_note'], - 'create_time' => (int)$refund['create_time'], + 'create_time' => $refund['create_time'], ]; } diff --git a/app/Services/Frontend/My/ReviewList.php b/app/Services/Frontend/My/ReviewList.php new file mode 100644 index 00000000..9530c200 --- /dev/null +++ b/app/Services/Frontend/My/ReviewList.php @@ -0,0 +1,73 @@ +getLoginUser(); + + $pagerQuery = new PagerQuery(); + + $params = $pagerQuery->getParams(); + + $params['user_id'] = $user->id; + $params['deleted'] = 0; + + $sort = $pagerQuery->getSort(); + $page = $pagerQuery->getPage(); + $limit = $pagerQuery->getLimit(); + + $reviewRepo = new ReviewRepo(); + + $pager = $reviewRepo->paginate($params, $sort, $page, $limit); + + return $this->handleReviews($pager); + } + + protected function handleReviews($pager) + { + if ($pager->total_items == 0) { + return $pager; + } + + $builder = new ReviewListBuilder(); + + $reviews = $pager->items->toArray(); + + $courses = $builder->getCourses($reviews); + + $items = []; + + foreach ($reviews as $review) { + + $course = $courses[$review['course_id']] ?? []; + + $items[] = [ + 'id' => $review['id'], + 'question' => $review['question'], + 'answer' => $review['answer'], + 'agree_count' => $review['agree_count'], + 'oppose_count' => $review['oppose_count'], + 'create_time' => $review['create_time'], + 'update_time' => $review['update_time'], + 'course' => $course, + ]; + } + + $pager->items = $items; + + return $pager; + } + +} diff --git a/app/Services/Frontend/My/UserInfo.php b/app/Services/Frontend/My/UserInfo.php index 4225472e..6d5f58e4 100644 --- a/app/Services/Frontend/My/UserInfo.php +++ b/app/Services/Frontend/My/UserInfo.php @@ -8,7 +8,7 @@ use App\Services\Frontend\Service; class UserInfo extends Service { - public function getUser() + public function handle() { $user = $this->getLoginUser(); diff --git a/app/Services/Frontend/Order/OrderConfirmInfo.php b/app/Services/Frontend/Order/ConfirmInfo.php similarity index 74% rename from app/Services/Frontend/Order/OrderConfirmInfo.php rename to app/Services/Frontend/Order/ConfirmInfo.php index 3e5d2fe9..c6773633 100644 --- a/app/Services/Frontend/Order/OrderConfirmInfo.php +++ b/app/Services/Frontend/Order/ConfirmInfo.php @@ -11,54 +11,55 @@ use App\Repos\Package as PackageRepo; use App\Services\Frontend\Service; use App\Validators\Order as OrderValidator; -class OrderConfirmInfo extends Service +class ConfirmInfo extends Service { - public function getConfirmInfo() + public function handle() { - $query = $this->request->getQuery(); + $itemId = $this->request->getQuery('item_id'); + $itemType = $this->request->getQuery('item_type'); $user = $this->getLoginUser(); $validator = new OrderValidator(); - $validator->checkItemType($query['item_type']); + $validator->checkItemType($itemType); $result = []; - $result['item_id'] = $query['item_id']; - $result['item_type'] = $query['item_type']; + $result['item_id'] = $itemId; + $result['item_type'] = $itemType; - if ($query['item_type'] == OrderModel::ITEM_COURSE) { + if ($itemType == OrderModel::ITEM_COURSE) { - $course = $validator->checkCourseItem($query['item_id']); + $course = $validator->checkCourse($itemId); $courseInfo = $this->handleCourseInfo($course); $result['item_info']['course'] = $courseInfo; $result['amount'] = $user->vip ? $course->vip_price : $course->market_price; - } elseif ($query['item_type'] == OrderModel::ITEM_PACKAGE) { + } elseif ($itemType == OrderModel::ITEM_PACKAGE) { - $package = $validator->checkPackageItem($query['item_id']); + $package = $validator->checkPackage($itemId); $packageInfo = $this->handlePackageInfo($package); $result['item_info']['package'] = $packageInfo; $result['amount'] = $user->vip ? $package->vip_price : $package->market_price; - } elseif ($query['item_type'] == OrderModel::ITEM_VIP) { + } elseif ($itemType == OrderModel::ITEM_VIP) { - $vip = $validator->checkVipItem($query['item_id']); + $vip = $validator->checkVip($itemId); $vipInfo = $this->handleVipInfo($vip); $result['item_info']['vip'] = $vipInfo; $result['amount'] = $vip->price; - } elseif ($query['item_type'] == OrderModel::ITEM_REWARD) { + } elseif ($itemType == OrderModel::ITEM_REWARD) { - list($courseId, $rewardId) = explode('-', $query['item_id']); + list($courseId, $rewardId) = explode('-', $itemId); - $course = $validator->checkCourseItem($courseId); - $reward = $validator->checkRewardItem($rewardId); + $course = $validator->checkCourse($courseId); + $reward = $validator->checkReward($rewardId); $courseInfo = $this->handleCourseInfo($course); $rewardInfo = $this->handleRewardInfo($reward); @@ -83,7 +84,6 @@ class OrderConfirmInfo extends Service $result = [ 'id' => $package->id, 'title' => $package->title, - 'summary' => $package->summary, 'market_price' => $package->market_price, 'vip_price' => $package->vip_price, ]; @@ -126,7 +126,6 @@ class OrderConfirmInfo extends Service 'id' => $course->id, 'title' => $course->title, 'cover' => $course->cover, - 'summary' => $course->summary, 'model' => $course->model, 'level' => $course->level, 'study_expiry' => $course->study_expiry, diff --git a/app/Services/Frontend/Order/OrderCancel.php b/app/Services/Frontend/Order/OrderCancel.php index c8aeb98d..ad217268 100644 --- a/app/Services/Frontend/Order/OrderCancel.php +++ b/app/Services/Frontend/Order/OrderCancel.php @@ -12,9 +12,9 @@ class OrderCancel extends Service use OrderTrait; - public function cancelOrder($sn) + public function handle($sn) { - $order = $this->checkOrder($sn); + $order = $this->checkOrderBySn($sn); $user = $this->getLoginUser(); diff --git a/app/Services/Frontend/Order/OrderCreate.php b/app/Services/Frontend/Order/OrderCreate.php index d0df627c..9be78acd 100644 --- a/app/Services/Frontend/Order/OrderCreate.php +++ b/app/Services/Frontend/Order/OrderCreate.php @@ -17,10 +17,7 @@ use App\Validators\UserDailyLimit as UserDailyLimitValidator; class OrderCreate extends Service { - /** - * @return OrderModel - */ - public function createOrder() + public function handle() { $post = $this->request->getPost(); @@ -51,7 +48,7 @@ class OrderCreate extends Service if ($post['item_type'] == OrderModel::ITEM_COURSE) { - $course = $validator->checkCourseItem($post['item_id']); + $course = $validator->checkCourse($post['item_id']); $validator->checkIfBoughtCourse($user->id, $course->id); @@ -59,7 +56,7 @@ class OrderCreate extends Service } elseif ($post['item_type'] == OrderModel::ITEM_PACKAGE) { - $package = $validator->checkPackageItem($post['item_id']); + $package = $validator->checkPackage($post['item_id']); $validator->checkIfBoughtPackage($user->id, $package->id); @@ -67,7 +64,7 @@ class OrderCreate extends Service } elseif ($post['item_type'] == OrderModel::ITEM_VIP) { - $vip = $validator->checkVipItem($post['item_id']); + $vip = $validator->checkVip($post['item_id']); $order = $this->createVipOrder($vip, $user); @@ -75,8 +72,8 @@ class OrderCreate extends Service list($courseId, $rewardId) = explode('-', $post['item_id']); - $course = $validator->checkCourseItem($courseId); - $reward = $validator->checkRewardItem($rewardId); + $course = $validator->checkCourse($courseId); + $reward = $validator->checkReward($rewardId); $order = $this->createRewardOrder($course, $reward, $user); } diff --git a/app/Services/Frontend/Order/OrderInfo.php b/app/Services/Frontend/Order/OrderInfo.php index 43bea552..8f398f74 100644 --- a/app/Services/Frontend/Order/OrderInfo.php +++ b/app/Services/Frontend/Order/OrderInfo.php @@ -9,27 +9,22 @@ use App\Validators\Order as OrderValidator; class OrderInfo extends Service { - public function getOrderInfo() + public function handle($sn) { - $sn = $this->request->getQuery('sn'); - $validator = new OrderValidator(); $order = $validator->checkOrderBySn($sn); - return $this->handleOrderInfo($order); + return $this->handleOrder($order); } - /** - * @param OrderModel $order - * @return array - */ - protected function handleOrderInfo($order) + protected function handleOrder(OrderModel $order) { $order->item_info = $this->handleItemInfo($order); - $result = [ - 'sn' => $order->id, + return [ + 'id' => $order->id, + 'sn' => $order->sn, 'subject' => $order->subject, 'amount' => $order->amount, 'status' => $order->status, @@ -39,15 +34,9 @@ class OrderInfo extends Service 'item_info' => $order->item_info, 'create_time' => $order->create_time, ]; - - return $result; } - /** - * @param OrderModel $order - * @return array - */ - protected function handleItemInfo($order) + protected function handleItemInfo(OrderModel $order) { /** * @var array $itemInfo @@ -70,22 +59,14 @@ class OrderInfo extends Service return $itemInfo; } - /** - * @param array $itemInfo - * @return array - */ - protected function handleCourseInfo($itemInfo) + protected function handleCourseInfo(array $itemInfo) { $itemInfo['course']['cover'] = kg_ci_img_url($itemInfo['course']['cover']); return $itemInfo; } - /** - * @param array $itemInfo - * @return array - */ - protected function handlePackageInfo($itemInfo) + protected function handlePackageInfo(array $itemInfo) { $baseUrl = kg_ci_base_url(); @@ -96,11 +77,7 @@ class OrderInfo extends Service return $itemInfo; } - /** - * @param array $itemInfo - * @return array - */ - protected function handleVipInfo($itemInfo) + protected function handleVipInfo(array $itemInfo) { return $itemInfo; } diff --git a/app/Services/Frontend/Order/OrderTrade.php b/app/Services/Frontend/Order/TradeCreate.php similarity index 86% rename from app/Services/Frontend/Order/OrderTrade.php rename to app/Services/Frontend/Order/TradeCreate.php index c54b97ba..bbb6f17a 100644 --- a/app/Services/Frontend/Order/OrderTrade.php +++ b/app/Services/Frontend/Order/TradeCreate.php @@ -9,20 +9,16 @@ use App\Services\Pay\Alipay as AlipayService; use App\Services\Pay\Wxpay as WxPayService; use App\Validators\Trade as TradeValidator; -class OrderTrade extends Service +class TradeCreate extends Service { use OrderTrait; - /** - * @param string $sn - * @return mixed - */ - public function createTrade($sn) + public function handle() { $post = $this->request->getPost(); - $order = $this->checkOrder($sn); + $order = $this->checkOrderBySn($post['order_sn']); $user = $this->getLoginUser(); @@ -58,10 +54,6 @@ class OrderTrade extends Service } } - /** - * @param TradeModel $trade - * @return mixed - */ protected function getQrCode(TradeModel $trade) { $qrCode = null; diff --git a/app/Services/Frontend/OrderTrait.php b/app/Services/Frontend/OrderTrait.php index 3280962d..ce41f3ab 100644 --- a/app/Services/Frontend/OrderTrait.php +++ b/app/Services/Frontend/OrderTrait.php @@ -7,7 +7,7 @@ use App\Validators\Order as OrderValidator; trait OrderTrait { - public function checkOrder($sn) + public function checkOrderBySn($sn) { $validator = new OrderValidator(); diff --git a/app/Services/Frontend/Package/CourseList.php b/app/Services/Frontend/Package/CourseList.php index 630e1290..0ff2afaf 100644 --- a/app/Services/Frontend/Package/CourseList.php +++ b/app/Services/Frontend/Package/CourseList.php @@ -2,6 +2,7 @@ namespace App\Services\Frontend\Package; +use App\Caches\PackageCourseList as PackageCourseListCache; use App\Services\Frontend\PackageTrait; use App\Services\Frontend\Service; @@ -10,9 +11,15 @@ class CourseList extends Service use PackageTrait; - public function handle() + public function handle($id) { + $package = $this->checkPackageCache($id); + $cache = new PackageCourseListCache(); + + $courses = $cache->get($package->id); + + return $courses ?: []; } } diff --git a/app/Services/Frontend/Review/ReviewCreate.php b/app/Services/Frontend/Review/ReviewCreate.php index 2a3b12a6..4df258a8 100644 --- a/app/Services/Frontend/Review/ReviewCreate.php +++ b/app/Services/Frontend/Review/ReviewCreate.php @@ -46,6 +46,8 @@ class ReviewCreate extends Service $this->incrCourseReviewCount($course); $this->incrUserDailyReviewCount($user); + + return $review; } protected function incrCourseReviewCount(CourseModel $course) diff --git a/app/Services/Frontend/Review/ReviewDelete.php b/app/Services/Frontend/Review/ReviewDelete.php new file mode 100644 index 00000000..6a9b0f97 --- /dev/null +++ b/app/Services/Frontend/Review/ReviewDelete.php @@ -0,0 +1,38 @@ +checkReview($id); + + $course = $this->checkCourseCache($review->course_id); + + $user = $this->getLoginUser(); + + $validator = new ReviewValidator(); + + $validator->checkOwner($user->id, $review->user_id); + + $review->delete(); + + $this->decrCourseReviewCount($course); + } + + protected function decrCourseReviewCount(CourseModel $course) + { + $this->eventsManager->fire('courseCounter:decrReviewCount', $this, $course); + } + +} diff --git a/app/Services/Frontend/Review/ReviewInfo.php b/app/Services/Frontend/Review/ReviewInfo.php new file mode 100644 index 00000000..6be9caf3 --- /dev/null +++ b/app/Services/Frontend/Review/ReviewInfo.php @@ -0,0 +1,72 @@ +checkReview($id); + + $user = $this->getCurrentUser(); + + return $this->handleReview($review, $user); + } + + protected function handleReview(ReviewModel $review, UserModel $user) + { + $result = [ + 'id' => $review->id, + 'content' => $review->content, + 'reply' => $review->reply, + 'rating' => $review->rating, + 'agree_count' => $review->agree_count, + 'oppose_count' => $review->oppose_count, + 'create_time' => $review->create_time, + 'update_time' => $review->update_time, + ]; + + $me = [ + 'agreed' => 0, + 'opposed' => 0, + ]; + + if ($user->id > 0) { + + $voteRepo = new ReviewVoteRepo(); + + $vote = $voteRepo->findReviewVote($review->id, $user->id); + + if ($vote) { + $me['agreed'] = $vote->type == ReviewVoteModel::TYPE_AGREE ? 1 : 0; + $me['opposed'] = $vote->type == ReviewVoteModel::TYPE_OPPOSE ? 1 : 0; + } + } + + $userRepo = new UserRepo(); + + $owner = $userRepo->findById($review->user_id); + + $result['owner'] = [ + 'id' => $owner->id, + 'name' => $owner->name, + 'avatar' => $owner->avatar, + ]; + + $result['me'] = $me; + + return $result; + } + +} diff --git a/app/Services/Frontend/Review/ReviewUpdate.php b/app/Services/Frontend/Review/ReviewUpdate.php new file mode 100644 index 00000000..275b10e5 --- /dev/null +++ b/app/Services/Frontend/Review/ReviewUpdate.php @@ -0,0 +1,35 @@ +request->getPost(); + + $review = $this->checkReview($id); + + $user = $this->getLoginUser(); + + $validator = new ReviewValidator(); + + $validator->checkOwner($user->id, $review->user_id); + + $content = $validator->checkContent($post['content']); + $rating = $validator->checkRating($post['rating']); + + $review->content = $content; + $review->rating = $rating; + $review->update(); + } + +} diff --git a/app/Services/Frontend/User/CourseList.php b/app/Services/Frontend/User/CourseList.php index b5207cbb..3edd0bbb 100644 --- a/app/Services/Frontend/User/CourseList.php +++ b/app/Services/Frontend/User/CourseList.php @@ -53,7 +53,7 @@ class CourseList extends Service foreach ($relations as $relation) { - $course = $courses[$relation['course_id']] ?? []; + $course = $courses[$relation['course_id']] ?? new \stdClass(); $items = [ 'course' => $course, diff --git a/app/Services/Frontend/User/UserInfo.php b/app/Services/Frontend/User/UserInfo.php index 7d2eff76..c67fa334 100644 --- a/app/Services/Frontend/User/UserInfo.php +++ b/app/Services/Frontend/User/UserInfo.php @@ -20,8 +20,6 @@ class UserInfo extends Service protected function handleUser(UserModel $user) { - $user->avatar = kg_ci_img_url($user->avatar); - return [ 'id' => $user->id, 'name' => $user->name, diff --git a/app/Validators/Category.php b/app/Validators/Category.php index 73fdfed7..34e608fd 100644 --- a/app/Validators/Category.php +++ b/app/Validators/Category.php @@ -109,12 +109,12 @@ class Category extends Validator { $categoryRepo = new CategoryRepo(); - $list = $categoryRepo->findAll([ + $categories = $categoryRepo->findAll([ 'parent_id' => $category->id, 'deleted' => 0, ]); - if ($list->count() > 0) { + if ($categories->count() > 0) { throw new BadRequestException('category.has_child_node'); } } diff --git a/app/Validators/Chapter.php b/app/Validators/Chapter.php index 5a79a038..e1b7f5fc 100644 --- a/app/Validators/Chapter.php +++ b/app/Validators/Chapter.php @@ -169,12 +169,12 @@ class Chapter extends Validator { $chapterRepo = new ChapterRepo(); - $list = $chapterRepo->findAll([ + $chapters = $chapterRepo->findAll([ 'parent_id' => $chapter->id, 'deleted' => 0, ]); - if ($list->count() > 0) { + if ($chapters->count() > 0) { throw new BadRequestException('chapter.has_child_node'); } } diff --git a/app/Validators/Course.php b/app/Validators/Course.php index d2db0325..a97d5ee6 100644 --- a/app/Validators/Course.php +++ b/app/Validators/Course.php @@ -108,17 +108,40 @@ class Course extends Validator public function checkDetails($details) { - return $this->filter->sanitize($details, ['trim']); + $value = $this->filter->sanitize($details, ['trim']); + + $length = kg_strlen($value); + + if ($length > 3000) { + throw new BadRequestException('course.details_too_long'); + } + + return $value; } public function checkSummary($summary) { - return $this->filter->sanitize($summary, ['trim', 'string']); + $value = $this->filter->sanitize($summary, ['trim', 'string']); + + $length = kg_strlen($value); + + if ($length > 500) { + throw new BadRequestException('course.summary_too_long'); + } + + return $value; } public function checkKeywords($keywords) { $keywords = $this->filter->sanitize($keywords, ['trim', 'string']); + + $length = kg_strlen($keywords); + + if ($length > 100) { + throw new BadRequestException('course.keywords_too_long'); + } + $keywords = str_replace(['|', ';', ';', '、', ','], '@', $keywords); $keywords = explode('@', $keywords); @@ -156,6 +179,13 @@ class Course extends Validator return $value; } + public function checkComparePrice($marketPrice, $vipPrice) + { + if ($vipPrice > $marketPrice) { + throw new BadRequestException('course.invalid_compare_price'); + } + } + public function checkStudyExpiry($expiry) { $options = CourseModel::studyExpiryOptions(); @@ -207,7 +237,7 @@ class Course extends Validator } } - if ($publishedCount < $totalCount / 3) { + if ($publishedCount / $totalCount < 0.3) { throw new BadRequestException('course.pub_chapter_not_enough'); } } diff --git a/app/Validators/Nav.php b/app/Validators/Nav.php index 579b1269..7ada392a 100644 --- a/app/Validators/Nav.php +++ b/app/Validators/Nav.php @@ -114,12 +114,12 @@ class Nav extends Validator { $navRepo = new NavRepo(); - $list = $navRepo->findAll([ + $navs = $navRepo->findAll([ 'parent_id' => $nav->id, 'deleted' => 0, ]); - if ($list->count() > 0) { + if ($navs->count() > 0) { throw new BadRequestException('nav.has_child_node'); } } diff --git a/app/Validators/Order.php b/app/Validators/Order.php index a2802146..2fd8ff92 100644 --- a/app/Validators/Order.php +++ b/app/Validators/Order.php @@ -50,7 +50,7 @@ class Order extends Validator return $itemType; } - public function checkCourseItem($itemId) + public function checkCourse($itemId) { $courseRepo = new CourseRepo(); @@ -63,7 +63,7 @@ class Order extends Validator return $item; } - public function checkPackageItem($itemId) + public function checkPackage($itemId) { $packageRepo = new PackageRepo(); @@ -76,7 +76,7 @@ class Order extends Validator return $item; } - public function checkVipItem($itemId) + public function checkVip($itemId) { $vipRepo = new VipRepo(); @@ -89,7 +89,7 @@ class Order extends Validator return $item; } - public function checkRewardItem($itemId) + public function checkReward($itemId) { $rewardRepo = new RewardRepo(); diff --git a/app/Validators/Slide.php b/app/Validators/Slide.php index bef60e75..cda6b48b 100644 --- a/app/Validators/Slide.php +++ b/app/Validators/Slide.php @@ -35,7 +35,7 @@ class Slide extends Validator throw new BadRequestException('slide.title_too_short'); } - if ($length > 30) { + if ($length > 50) { throw new BadRequestException('slide.title_too_long'); } diff --git a/config/errors.php b/config/errors.php index eab61d30..eb4373cc 100644 --- a/config/errors.php +++ b/config/errors.php @@ -72,12 +72,12 @@ $error['category.invalid_priority'] = '无效的排序值(范围:1-255)'; $error['category.invalid_publish_status'] = '无效的发布状态'; $error['category.name_too_short'] = '名称太短(少于2个字符)'; $error['category.name_too_long'] = '名称太长(多于30个字符)'; -$error['category.has_child_node'] = '存在子节点,不允许相关操作'; +$error['category.has_child_node'] = '不允许相关操作(存在子节点)'; /** * 导航相关 */ -$error['nav.not_found'] = '分类不存在'; +$error['nav.not_found'] = '导航不存在'; $error['nav.parent_not_found'] = '父级分类不存在'; $error['nav.invalid_url'] = '无效的访问地址'; $error['nav.invalid_position'] = '无效的位置类型'; @@ -86,31 +86,35 @@ $error['nav.invalid_priority'] = '无效的排序值(范围:1-255)'; $error['nav.invalid_publish_status'] = '无效的发布状态'; $error['nav.name_too_short'] = '名称太短(少于2个字符)'; $error['nav.name_too_long'] = '名称太长(多于30个字符)'; -$error['nav.has_child_node'] = '存在子节点,不允许相关操作'; +$error['nav.has_child_node'] = '不允许相关操作(存在子节点)'; /** * 课程相关 */ $error['course.not_found'] = '课程不存在'; $error['course.title_too_short'] = '标题太短(少于5个字符)'; -$error['course.title_too_long'] = '标题太长(多于30个字符)'; +$error['course.title_too_long'] = '标题太长(多于50个字符)'; +$error['course.summary_too_long'] = '标题太长(多于255个字符)'; +$error['course.keywords_too_long'] = '关键字太长(多于100个字符)'; +$error['course.details_too_long'] = '详情太长(多于3000个字符)'; $error['course.invalid_model'] = '无效的模型类别'; $error['course.invalid_level'] = '无效的难度级别'; $error['course.invalid_cover'] = '无效的封面'; -$error['course.invalid_market_price'] = '无效的市场价格'; -$error['course.invalid_vip_price'] = '无效的会员价格'; +$error['course.invalid_market_price'] = '无效的市场价格(范围:0-10000)'; +$error['course.invalid_vip_price'] = '无效的会员价格(范围:0-10000)'; +$error['course.invalid_compare_price'] = '无效的比较定价(会员价格高于市场价格)'; $error['course.invalid_study_expiry'] = '无效的学习期限'; $error['course.invalid_refund_expiry'] = '无效的退款期限'; $error['course.invalid_publish_status'] = '无效的发布状态'; $error['course.pub_chapter_not_found'] = '尚未发现已发布的课时'; -$error['course.pub_chapter_not_enough'] = '已发布的课时太少(未过三分之一)'; +$error['course.pub_chapter_not_enough'] = '已发布的课时太少(小于30%)'; /** * 话题相关 */ $error['topic.not_found'] = '话题不存在'; $error['topic.title_too_short'] = '标题太短(少于2个字符)'; -$error['topic.title_too_long'] = '标题太长(多于30个字符)'; +$error['topic.title_too_long'] = '标题太长(多于50个字符)'; $error['topic.summary_too_long'] = '简介太长(多于255个字符)'; $error['topic.invalid_publish_status'] = '无效的发布状态'; @@ -119,7 +123,7 @@ $error['topic.invalid_publish_status'] = '无效的发布状态'; */ $error['package.not_found'] = '套餐不存在'; $error['package.title_too_short'] = '标题太短(少于5个字符)'; -$error['package.title_too_long'] = '标题太长(多于30个字符)'; +$error['package.title_too_long'] = '标题太长(多于50个字符)'; $error['package.summary_too_long'] = '简介太长(多于255个字符)'; $error['package.invalid_market_price'] = '无效的市场价格'; $error['package.invalid_vip_price'] = '无效的会员价格'; @@ -151,7 +155,7 @@ $error['chapter.vod_not_ready'] = '点播资源尚未就绪'; $error['chapter.live_not_start'] = '直播尚未开始'; $error['chapter.live_time_empty'] = '直播时间尚未设置'; $error['chapter.read_not_ready'] = '文章内容尚未就绪'; -$error['chapter.has_child_node'] = '存在子节点,不允许相关操作'; +$error['chapter.has_child_node'] = '不允许相关操作(存在子节点)'; /** * 点播相关 @@ -213,7 +217,7 @@ $error['comment.content_too_long'] = '评价太长(多于1000个字符)'; */ $error['page.not_found'] = '单页不存在'; $error['page.title_too_short'] = '标题太短(少于2个字符)'; -$error['page.title_too_long'] = '标题太长(多于30个字符)'; +$error['page.title_too_long'] = '标题太长(多于50个字符)'; $error['page.content_too_short'] = '内容太短(少于10个字符)'; $error['page.content_too_long'] = '内容太长(多于3000个字符)'; $error['page.invalid_publish_status'] = '无效的发布状态'; @@ -223,7 +227,7 @@ $error['page.invalid_publish_status'] = '无效的发布状态'; */ $error['help.not_found'] = '帮助不存在'; $error['help.title_too_short'] = '标题太短(少于2个字符)'; -$error['help.title_too_long'] = '标题太长(多于30个字符)'; +$error['help.title_too_long'] = '标题太长(多于50个字符)'; $error['help.content_too_short'] = '内容太短(少于10个字符)'; $error['help.content_too_long'] = '内容太长(多于3000个字符)'; $error['help.invalid_priority'] = '无效的排序数值(范围:1-255)';