From 25b935edebb03766cf22a4196079b7b09588c821 Mon Sep 17 00:00:00 2001 From: koogua Date: Fri, 23 Jul 2021 20:12:44 +0800 Subject: [PATCH] v1.3.9 beta2 --- CHANGELOG.md | 4 +- .../Admin/Controllers/ConsultController.php | 30 +++++++++ .../Controllers/ModerationController.php | 12 ++++ app/Http/Admin/Services/AuthNode.php | 12 ++++ app/Http/Admin/Services/Consult.php | 38 +++++++++++ app/Http/Admin/Services/Index.php | 2 + app/Http/Admin/Services/Moderation.php | 40 ++++++++++++ app/Http/Admin/Views/answer/moderate.volt | 2 +- app/Http/Admin/Views/article/moderate.volt | 2 +- app/Http/Admin/Views/comment/moderate.volt | 2 +- app/Http/Admin/Views/consult/list.volt | 10 ++- app/Http/Admin/Views/consult/moderate.volt | 57 +++++++++++++++++ app/Http/Admin/Views/consult/search.volt | 15 +++-- app/Http/Admin/Views/index/main_mod_stat.volt | 8 +++ app/Http/Admin/Views/moderation/answers.volt | 2 +- app/Http/Admin/Views/moderation/articles.volt | 2 +- app/Http/Admin/Views/moderation/comments.volt | 2 +- app/Http/Admin/Views/moderation/consults.volt | 64 +++++++++++++++++++ .../Admin/Views/moderation/questions.volt | 2 +- app/Http/Admin/Views/moderation/reviews.volt | 14 ++-- app/Http/Admin/Views/page/list.volt | 4 +- app/Http/Admin/Views/question/moderate.volt | 2 +- app/Http/Admin/Views/review/list.volt | 4 +- app/Http/Admin/Views/review/moderate.volt | 10 +-- app/Http/Admin/Views/topic/list.volt | 4 +- app/Models/Consult.php | 16 +++++ app/Repos/Course.php | 12 ++-- app/Repos/Stat.php | 9 +++ app/Repos/TeacherConsult.php | 6 +- app/Services/Logic/Course/ConsultList.php | 1 + app/Services/Logic/Course/CourseList.php | 1 + app/Services/Logic/Course/ReviewList.php | 1 + .../Logic/User/Console/ConsultList.php | 2 +- db/migrations/20210720153027.php | 16 +++++ 34 files changed, 361 insertions(+), 47 deletions(-) create mode 100644 app/Http/Admin/Views/consult/moderate.volt create mode 100644 app/Http/Admin/Views/moderation/consults.volt diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fbb9684..e058e7df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,9 +13,9 @@ - 优化API的分页返回结构 - 增加文章,问答,评论相关API - 增加重新统计tag中相关计数计划任务 -- 增加tag的使用范围,文章,问题,课程计数 +- 增加tag的使用范围,文章,问题,课程计数 - 站点logo和favicon使用随机文件名 -- 增加评价审核 +- 增加评价,咨询审核 - 去除编辑器中的酷瓜云课堂标识 - 清理数据迁移文件 diff --git a/app/Http/Admin/Controllers/ConsultController.php b/app/Http/Admin/Controllers/ConsultController.php index fc28c89f..c0cbdb9c 100644 --- a/app/Http/Admin/Controllers/ConsultController.php +++ b/app/Http/Admin/Controllers/ConsultController.php @@ -20,7 +20,11 @@ class ConsultController extends Controller */ public function searchAction() { + $consultService = new ConsultService(); + $publishTypes = $consultService->getPublishTypes(); + + $this->view->setVar('publish_types', $publishTypes); } /** @@ -110,4 +114,30 @@ class ConsultController extends Controller return $this->jsonSuccess($content); } + /** + * @Route("/{id:[0-9]+}/moderate", name="admin.consult.moderate") + */ + public function moderateAction($id) + { + $consultService = new ConsultService(); + + if ($this->request->isPost()) { + + $consultService->moderate($id); + + $location = $this->url->get(['for' => 'admin.mod.consults']); + + $content = [ + 'location' => $location, + 'msg' => '审核咨询成功', + ]; + + return $this->jsonSuccess($content); + } + + $consult = $consultService->getConsultInfo($id); + + $this->view->setVar('consult', $consult); + } + } diff --git a/app/Http/Admin/Controllers/ModerationController.php b/app/Http/Admin/Controllers/ModerationController.php index 597db5da..353d516a 100644 --- a/app/Http/Admin/Controllers/ModerationController.php +++ b/app/Http/Admin/Controllers/ModerationController.php @@ -27,6 +27,18 @@ class ModerationController extends Controller $this->view->setVar('pager', $pager); } + /** + * @Get("/consults", name="admin.mod.consults") + */ + public function consultsAction() + { + $modService = new ModerationService(); + + $pager = $modService->getConsults(); + + $this->view->setVar('pager', $pager); + } + /** * @Get("/articles", name="admin.mod.articles") */ diff --git a/app/Http/Admin/Services/AuthNode.php b/app/Http/Admin/Services/AuthNode.php index a87fff5a..44db439b 100644 --- a/app/Http/Admin/Services/AuthNode.php +++ b/app/Http/Admin/Services/AuthNode.php @@ -514,6 +514,12 @@ class AuthNode extends Service 'type' => 'menu', 'route' => 'admin.mod.reviews', ], + [ + 'id' => '2-10-6', + 'title' => '咨询审核', + 'type' => 'menu', + 'route' => 'admin.mod.consults', + ], [ 'id' => '2-10-1', 'title' => '文章审核', @@ -631,6 +637,12 @@ class AuthNode extends Service 'type' => 'button', 'route' => 'admin.consult.delete', ], + [ + 'id' => '2-2-5', + 'title' => '审核咨询', + 'type' => 'button', + 'route' => 'admin.consult.moderate', + ], ], ], [ diff --git a/app/Http/Admin/Services/Consult.php b/app/Http/Admin/Services/Consult.php index 47efd63b..e0c416b8 100644 --- a/app/Http/Admin/Services/Consult.php +++ b/app/Http/Admin/Services/Consult.php @@ -15,12 +15,18 @@ use App\Models\Course as CourseModel; use App\Repos\Chapter as ChapterRepo; use App\Repos\Consult as ConsultRepo; use App\Repos\Course as CourseRepo; +use App\Services\Logic\Consult\ConsultInfo as ConsultInfoService; use App\Services\Logic\Notice\ConsultReply as ConsultReplyNotice; use App\Validators\Consult as ConsultValidator; class Consult extends Service { + public function getPublishTypes() + { + return ConsultModel::publishTypes(); + } + public function getConsults() { $pagerQuery = new PagerQuery(); @@ -52,6 +58,13 @@ class Consult extends Service return $this->findOrFail($id); } + public function getConsultInfo($id) + { + $service = new ConsultInfoService(); + + return $service->handle($id); + } + public function updateConsult($id) { $consult = $this->findOrFail($id); @@ -116,6 +129,31 @@ class Consult extends Service $this->handleItemConsults($consult); } + public function moderate($id) + { + $type = $this->request->getPost('type', ['trim', 'string']); + + $consult = $this->findOrFail($id); + + if ($type == 'approve') { + $consult->published = ConsultModel::PUBLISH_APPROVED; + } elseif ($type == 'reject') { + $consult->published = ConsultModel::PUBLISH_REJECTED; + } + + $consult->update(); + + $this->handleItemConsults($consult); + + if ($type == 'approve') { + $this->eventsManager->fire('Consult:afterApprove', $this, $consult); + } elseif ($type == 'reject') { + $this->eventsManager->fire('Consult:afterReject', $this, $consult); + } + + return $consult; + } + protected function handleItemConsults(ConsultModel $consult) { if ($consult->course_id > 0) { diff --git a/app/Http/Admin/Services/Index.php b/app/Http/Admin/Services/Index.php index 7228290d..42f06887 100644 --- a/app/Http/Admin/Services/Index.php +++ b/app/Http/Admin/Services/Index.php @@ -80,6 +80,7 @@ class Index extends Service $statRepo = new StatRepo(); $reviewCount = $statRepo->countPendingReviews(); + $consultCount = $statRepo->countPendingConsults(); $articleCount = $statRepo->countPendingArticles(); $questionCount = $statRepo->countPendingQuestions(); $answerCount = $statRepo->countPendingAnswers(); @@ -87,6 +88,7 @@ class Index extends Service return [ 'review_count' => $reviewCount, + 'consult_count' => $consultCount, 'article_count' => $articleCount, 'question_count' => $questionCount, 'answer_count' => $answerCount, diff --git a/app/Http/Admin/Services/Moderation.php b/app/Http/Admin/Services/Moderation.php index b9f64501..4cc534d8 100644 --- a/app/Http/Admin/Services/Moderation.php +++ b/app/Http/Admin/Services/Moderation.php @@ -9,17 +9,20 @@ namespace App\Http\Admin\Services; use App\Builders\AnswerList as AnswerListBuilder; use App\Builders\ArticleList as ArticleListBuilder; +use App\Builders\ConsultList as ConsultListBuilder; use App\Builders\QuestionList as QuestionListBuilder; use App\Builders\ReviewList as ReviewListBuilder; use App\Library\Paginator\Query as PagerQuery; use App\Models\Answer as AnswerModel; use App\Models\Article as ArticleModel; use App\Models\Comment as CommentModel; +use App\Models\Consult as ConsultModel; use App\Models\Question as QuestionModel; use App\Models\Review as ReviewModel; use App\Repos\Answer as AnswerRepo; use App\Repos\Article as ArticleRepo; use App\Repos\Comment as CommentRepo; +use App\Repos\Consult as ConsultRepo; use App\Repos\Question as QuestionRepo; use App\Repos\Review as ReviewRepo; @@ -46,6 +49,26 @@ class Moderation extends Service return $this->handleReviews($pager); } + public function getConsults() + { + $pagerQuery = new PagerQuery(); + + $params = $pagerQuery->getParams(); + + $params['published'] = ConsultModel::PUBLISH_PENDING; + $params['deleted'] = 0; + + $sort = $pagerQuery->getSort(); + $page = $pagerQuery->getPage(); + $limit = $pagerQuery->getLimit(); + + $consultRepo = new ConsultRepo(); + + $pager = $consultRepo->paginate($params, $sort, $page, $limit); + + return $this->handleConsults($pager); + } + public function getArticles() { $pagerQuery = new PagerQuery(); @@ -143,6 +166,23 @@ class Moderation extends Service return $pager; } + protected function handleConsults($pager) + { + if ($pager->total_items > 0) { + + $builder = new ConsultListBuilder(); + + $pipeA = $pager->items->toArray(); + $pipeB = $builder->handleCourses($pipeA); + $pipeC = $builder->handleUsers($pipeB); + $pipeD = $builder->objects($pipeC); + + $pager->items = $pipeD; + } + + return $pager; + } + protected function handleArticles($pager) { if ($pager->total_items > 0) { diff --git a/app/Http/Admin/Views/answer/moderate.volt b/app/Http/Admin/Views/answer/moderate.volt index 27616668..f8e4c85a 100644 --- a/app/Http/Admin/Views/answer/moderate.volt +++ b/app/Http/Admin/Views/answer/moderate.volt @@ -12,7 +12,7 @@
{{ answer.question.title }}
{{ answer.owner.name }} - {{ date('Y-m-d H:i',answer.create_time) }} + {{ date('Y-m-d H:i:s',answer.create_time) }}
{{ answer.content }}
diff --git a/app/Http/Admin/Views/article/moderate.volt b/app/Http/Admin/Views/article/moderate.volt index 5e6bd0f1..4c8ec764 100644 --- a/app/Http/Admin/Views/article/moderate.volt +++ b/app/Http/Admin/Views/article/moderate.volt @@ -15,7 +15,7 @@
{{ source_type(article.source_type) }} {{ article.owner.name }} - {{ date('Y-m-d H:i:',article.create_time) }} + {{ date('Y-m-d H:i:s',article.create_time) }}
{{ article.content }}
{% if article.tags %} diff --git a/app/Http/Admin/Views/comment/moderate.volt b/app/Http/Admin/Views/comment/moderate.volt index 951a7345..2c99c386 100644 --- a/app/Http/Admin/Views/comment/moderate.volt +++ b/app/Http/Admin/Views/comment/moderate.volt @@ -13,7 +13,7 @@
{{ comment.owner.name }} - {{ date('Y-m-d H:i',comment.create_time) }} + {{ date('Y-m-d H:i:s',comment.create_time) }}
{{ comment.content }}
diff --git a/app/Http/Admin/Views/consult/list.volt b/app/Http/Admin/Views/consult/list.volt index 7cf20cfc..6604af3b 100644 --- a/app/Http/Admin/Views/consult/list.volt +++ b/app/Http/Admin/Views/consult/list.volt @@ -46,9 +46,10 @@ {% for item in pager.items %} - {% set item.answer = item.answer ? item.answer : '等待回复ING...' %} + {% set item.answer = item.answer ? item.answer : 'N/A' %} {% set list_by_course_url = url({'for':'admin.consult.list'},{'course_id':item.course.id}) %} {% set list_by_user_url = url({'for':'admin.consult.list'},{'owner_id':item.owner.id}) %} + {% set moderate_url = url({'for':'admin.consult.moderate','id':item.id}) %} {% set edit_url = url({'for':'admin.consult.edit','id':item.id}) %} {% set update_url = url({'for':'admin.consult.update','id':item.id}) %} {% set delete_url = url({'for':'admin.consult.delete','id':item.id}) %} @@ -64,9 +65,9 @@

编号:{{ item.owner.id }}

-

提问:{{ date('Y-m-d H:i:s',item.create_time) }}

+

提问:{{ date('Y-m-d H:i',item.create_time) }}

{% if item.reply_time > 0 %} -

回复:{{ date('Y-m-d H:i:s',item.reply_time) }}

+

回复:{{ date('Y-m-d H:i',item.reply_time) }}

{% else %}

回复:N/A

{% endif %} @@ -76,6 +77,9 @@
+
+ +
+ {% for value,title in publish_types %} + + {% endfor %} +
+
@@ -31,13 +39,6 @@
-
- -
- - -
-
diff --git a/app/Http/Admin/Views/index/main_mod_stat.volt b/app/Http/Admin/Views/index/main_mod_stat.volt index dbe09bd0..8ec6dc50 100644 --- a/app/Http/Admin/Views/index/main_mod_stat.volt +++ b/app/Http/Admin/Views/index/main_mod_stat.volt @@ -10,6 +10,14 @@
+
+
+
咨询
+ +
+
文章
diff --git a/app/Http/Admin/Views/moderation/answers.volt b/app/Http/Admin/Views/moderation/answers.volt index 92c34900..24d18077 100644 --- a/app/Http/Admin/Views/moderation/answers.volt +++ b/app/Http/Admin/Views/moderation/answers.volt @@ -41,7 +41,7 @@

昵称:{{ item.owner.name }}

编号:{{ item.owner.id }}

- {{ date('Y-m-d H:i',item.create_time) }} + {{ date('Y-m-d H:i:s',item.create_time) }} 详情 diff --git a/app/Http/Admin/Views/moderation/articles.volt b/app/Http/Admin/Views/moderation/articles.volt index 01e80a7b..cc1184a3 100644 --- a/app/Http/Admin/Views/moderation/articles.volt +++ b/app/Http/Admin/Views/moderation/articles.volt @@ -45,7 +45,7 @@

昵称:{{ item.owner.name }}

编号:{{ item.owner.id }}

- {{ date('Y-m-d H:i',item.create_time) }} + {{ date('Y-m-d H:i:s',item.create_time) }} 详情 diff --git a/app/Http/Admin/Views/moderation/comments.volt b/app/Http/Admin/Views/moderation/comments.volt index 0aadf5e4..6100004d 100644 --- a/app/Http/Admin/Views/moderation/comments.volt +++ b/app/Http/Admin/Views/moderation/comments.volt @@ -37,7 +37,7 @@

昵称:{{ item.owner.name }}

编号:{{ item.owner.id }}

- {{ date('Y-m-d H:i',item.create_time) }} + {{ date('Y-m-d H:i:s',item.create_time) }} 详情 diff --git a/app/Http/Admin/Views/moderation/consults.volt b/app/Http/Admin/Views/moderation/consults.volt new file mode 100644 index 00000000..6009231d --- /dev/null +++ b/app/Http/Admin/Views/moderation/consults.volt @@ -0,0 +1,64 @@ +{% extends 'templates/main.volt' %} + +{% block content %} + + {% set search_url = url({'for':'admin.consult.search'}) %} + +
+
+ + 咨询审核 + +
+
+ + + + + + + + + + + + + + + + + + {% for item in pager.items %} + {% set item.answer = item.answer ? item.answer : 'N/A' %} + {% set owner_url = url({'for':'home.user.show','id':item.owner.id}) %} + {% set course_url = url({'for':'home.course.show','id':item.course.id}) %} + {% set moderate_url = url({'for':'admin.consult.moderate','id':item.id}) %} + + + + + + + {% endfor %} + +
问答用户时间操作
+

课程:{{ item.course.title }}({{ item.course.id }})

+

提问:{{ item.question }}

+

回复:{{ item.answer }}

+
+

昵称:{{ item.owner.name }}

+

编号:{{ item.owner.id }}

+
+

提问:{{ date('Y-m-d H:i:s',item.create_time) }}

+ {% if item.reply_time > 0 %} +

回复:{{ date('Y-m-d H:i:s',item.reply_time) }}

+ {% else %} +

回复:N/A

+ {% endif %} +
+ 详情 +
+ + {{ partial('partials/pager') }} + +{% endblock %} \ No newline at end of file diff --git a/app/Http/Admin/Views/moderation/questions.volt b/app/Http/Admin/Views/moderation/questions.volt index b8c6728f..71e922d3 100644 --- a/app/Http/Admin/Views/moderation/questions.volt +++ b/app/Http/Admin/Views/moderation/questions.volt @@ -44,7 +44,7 @@

昵称:{{ item.owner.name }}

编号:{{ item.owner.id }}

- {{ date('Y-m-d H:i',item.create_time) }} + {{ date('Y-m-d H:i:s',item.create_time) }} 详情 diff --git a/app/Http/Admin/Views/moderation/reviews.volt b/app/Http/Admin/Views/moderation/reviews.volt index 153c73ce..256ed838 100644 --- a/app/Http/Admin/Views/moderation/reviews.volt +++ b/app/Http/Admin/Views/moderation/reviews.volt @@ -17,13 +17,15 @@ + 內容 - 用户 评分 + 用户 + 时间 操作 @@ -36,17 +38,17 @@

课程:{{ item.course.title }}({{ item.course.id }})

评价:{{ item.content }}

-

时间:{{ date('Y-m-d H:i',item.create_time) }}

- - -

昵称:{{ item.owner.name }}

-

编号:{{ item.owner.id }}

内容实用:{{ item.rating1 }}

通俗易懂:{{ item.rating2 }}

逻辑清晰:{{ item.rating3 }}

+ +

昵称:{{ item.owner.name }}

+

编号:{{ item.owner.id }}

+ + {{ date('Y-m-d H:i:s',item.create_time) }} 详情 diff --git a/app/Http/Admin/Views/page/list.volt b/app/Http/Admin/Views/page/list.volt index 0168014d..52403d25 100644 --- a/app/Http/Admin/Views/page/list.volt +++ b/app/Http/Admin/Views/page/list.volt @@ -45,8 +45,8 @@ {{ item.id }} {{ item.title }} - {{ date('Y-m-d H:i',item.create_time) }} - {{ date('Y-m-d H:i',item.update_time) }} + {{ date('Y-m-d H:i:s',item.create_time) }} + {{ date('Y-m-d H:i:s',item.update_time) }} diff --git a/app/Http/Admin/Views/question/moderate.volt b/app/Http/Admin/Views/question/moderate.volt index 38ad6229..70ab0fa9 100644 --- a/app/Http/Admin/Views/question/moderate.volt +++ b/app/Http/Admin/Views/question/moderate.volt @@ -12,7 +12,7 @@
{{ question.title }}
{{ question.owner.name }} - {{ date('Y-m-d H:i',question.create_time) }} + {{ date('Y-m-d H:i:s',question.create_time) }}
{{ question.content }}
{% if question.tags %} diff --git a/app/Http/Admin/Views/review/list.volt b/app/Http/Admin/Views/review/list.volt index b904ffde..3bbba38b 100644 --- a/app/Http/Admin/Views/review/list.volt +++ b/app/Http/Admin/Views/review/list.volt @@ -44,8 +44,8 @@ {% for item in pager.items %} {% set list_by_course_url = url({'for':'admin.review.list'},{'course_id':item.course.id}) %} {% set list_by_owner_url = url({'for':'admin.review.list'},{'owner_id':item.owner.id}) %} + {% set moderate_url = url({'for':'admin.review.moderate','id':item.id}) %} {% set edit_url = url({'for':'admin.review.edit','id':item.id}) %} - {% set review_url = url({'for':'admin.review.moderate','id':item.id}) %} {% set update_url = url({'for':'admin.review.update','id':item.id}) %} {% set delete_url = url({'for':'admin.review.delete','id':item.id}) %} {% set restore_url = url({'for':'admin.review.restore','id':item.id}) %} @@ -70,7 +70,7 @@
    {% if item.published == 1 %} -
  • 审核
  • +
  • 审核
  • {% endif %}
  • 编辑
  • {% if item.deleted == 0 %} diff --git a/app/Http/Admin/Views/review/moderate.volt b/app/Http/Admin/Views/review/moderate.volt index da027df9..841701bf 100644 --- a/app/Http/Admin/Views/review/moderate.volt +++ b/app/Http/Admin/Views/review/moderate.volt @@ -2,10 +2,6 @@ {% block content %} - {{ partial('macros/article') }} - - {% set owner_url = url({'for':'home.user.show','id':review.owner.id}) %} -
    审核内容
    @@ -35,7 +31,7 @@
    -
    {{ review.content }}
    +
    {{ review.content }}
    @@ -50,8 +46,8 @@
    - - + +
    diff --git a/app/Http/Admin/Views/topic/list.volt b/app/Http/Admin/Views/topic/list.volt index 15731ed4..e361c7a8 100644 --- a/app/Http/Admin/Views/topic/list.volt +++ b/app/Http/Admin/Views/topic/list.volt @@ -53,8 +53,8 @@ {{ item.id }} {{ item.title }} {{ item.course_count }} - {{ date('Y-m-d H:i',item.create_time) }} - {{ date('Y-m-d H:i',item.update_time) }} + {{ date('Y-m-d H:i:s',item.create_time) }} + {{ date('Y-m-d H:i:s',item.update_time) }}
    diff --git a/app/Models/Consult.php b/app/Models/Consult.php index e2b74d30..d4cddd88 100644 --- a/app/Models/Consult.php +++ b/app/Models/Consult.php @@ -12,6 +12,13 @@ use Phalcon\Mvc\Model\Behavior\SoftDelete; class Consult extends Model { + /** + * 发布状态 + */ + const PUBLISH_PENDING = 1; // 审核中 + const PUBLISH_APPROVED = 2; // 已发布 + const PUBLISH_REJECTED = 3; // 未通过 + /** * 优先级 */ @@ -183,4 +190,13 @@ class Consult extends Model $this->update_time = time(); } + public static function publishTypes() + { + return [ + self::PUBLISH_PENDING => '审核中', + self::PUBLISH_APPROVED => '已发布', + self::PUBLISH_REJECTED => '未通过', + ]; + } + } diff --git a/app/Repos/Course.php b/app/Repos/Course.php index 96bcee8e..f32e2562 100644 --- a/app/Repos/Course.php +++ b/app/Repos/Course.php @@ -367,16 +367,16 @@ class Course extends Repository public function countConsults($courseId) { return (int)ConsultModel::count([ - 'conditions' => 'course_id = :course_id: AND published = 1 AND deleted = 0', - 'bind' => ['course_id' => $courseId], + 'conditions' => 'course_id = ?1 AND published = ?2 AND deleted = 0', + 'bind' => [1 => $courseId, 2 => ConsultModel::PUBLISH_APPROVED], ]); } public function countReviews($courseId) { return (int)ReviewModel::count([ - 'conditions' => 'course_id = :course_id: AND published = :published: AND deleted = 0', - 'bind' => ['course_id' => $courseId, 'published' => ReviewModel::PUBLISH_APPROVED], + 'conditions' => 'course_id = ?1 AND published = ?2 AND deleted = 0', + 'bind' => [1 => $courseId, 2 => ReviewModel::PUBLISH_APPROVED], ]); } @@ -392,8 +392,8 @@ class Course extends Repository { return (int)ReviewModel::average([ 'column' => 'rating', - 'conditions' => 'course_id = :course_id: AND published = 1 AND deleted = 0', - 'bind' => ['course_id' => $courseId], + 'conditions' => 'course_id = ?1 AND published = ?2 AND deleted = 0', + 'bind' => [1 => $courseId, 2 => ReviewModel::PUBLISH_APPROVED], ]); } diff --git a/app/Repos/Stat.php b/app/Repos/Stat.php index 5623eac5..da00d14d 100644 --- a/app/Repos/Stat.php +++ b/app/Repos/Stat.php @@ -10,6 +10,7 @@ namespace App\Repos; use App\Models\Answer as AnswerModel; use App\Models\Article as ArticleModel; use App\Models\Comment as CommentModel; +use App\Models\Consult as ConsultModel; use App\Models\Online as OnlineModel; use App\Models\Order as OrderModel; use App\Models\OrderStatus as OrderStatusModel; @@ -32,6 +33,14 @@ class Stat extends Repository ]); } + public function countPendingConsults() + { + return (int)ConsultModel::count([ + 'conditions' => 'published = :published: AND deleted = 0', + 'bind' => ['published' => ConsultModel::PUBLISH_PENDING], + ]); + } + public function countPendingArticles() { return (int)ArticleModel::count([ diff --git a/app/Repos/TeacherConsult.php b/app/Repos/TeacherConsult.php index 7e8bda77..a53fc888 100644 --- a/app/Repos/TeacherConsult.php +++ b/app/Repos/TeacherConsult.php @@ -25,7 +25,7 @@ class TeacherConsult extends Repository if (!empty($where['user_id'])) { $builder->andWhere('cu.user_id = :user_id:', ['user_id' => $where['user_id']]); $builder->andWhere('cu.role_type = :role_type:', ['role_type' => CourseUserModel::ROLE_TEACHER]); - $builder->andWhere('cu.deleted = :deleted:', ['deleted' => 0]); + $builder->andWhere('cu.deleted = 0'); } if (isset($where['replied'])) { @@ -36,6 +36,10 @@ class TeacherConsult extends Repository } } + $builder->andWhere('c.published = :published:', ['published' => ConsultModel::PUBLISH_APPROVED]); + + $builder->andWhere('c.deleted = 0'); + switch ($sort) { default: $orderBy = 'c.id DESC'; diff --git a/app/Services/Logic/Course/ConsultList.php b/app/Services/Logic/Course/ConsultList.php index e72f4f6a..28de70fd 100644 --- a/app/Services/Logic/Course/ConsultList.php +++ b/app/Services/Logic/Course/ConsultList.php @@ -32,6 +32,7 @@ class ConsultList extends LogicService 'course_id' => $course->id, 'private' => 0, 'published' => 1, + 'deleted' => 0, ]; $consultRepo = new ConsultRepo(); diff --git a/app/Services/Logic/Course/CourseList.php b/app/Services/Logic/Course/CourseList.php index f7837aa6..37cc98cd 100644 --- a/app/Services/Logic/Course/CourseList.php +++ b/app/Services/Logic/Course/CourseList.php @@ -42,6 +42,7 @@ class CourseList extends LogicService } $params['published'] = 1; + $params['deleted'] = 0; $sort = $pagerQuery->getSort(); $page = $pagerQuery->getPage(); diff --git a/app/Services/Logic/Course/ReviewList.php b/app/Services/Logic/Course/ReviewList.php index 8f5984a3..862e50b8 100644 --- a/app/Services/Logic/Course/ReviewList.php +++ b/app/Services/Logic/Course/ReviewList.php @@ -33,6 +33,7 @@ class ReviewList extends LogicService $params = [ 'course_id' => $course->id, 'published' => ReviewModel::PUBLISH_APPROVED, + 'deleted' => 0, ]; $reviewRepo = new ReviewRepo(); diff --git a/app/Services/Logic/User/Console/ConsultList.php b/app/Services/Logic/User/Console/ConsultList.php index 57b853c6..09ff2ad0 100644 --- a/app/Services/Logic/User/Console/ConsultList.php +++ b/app/Services/Logic/User/Console/ConsultList.php @@ -24,7 +24,7 @@ class ConsultList extends LogicService $params = $pagerQuery->getParams(); $params['owner_id'] = $user->id; - $params['published'] = 1; + $params['deleted'] = 0; $sort = $pagerQuery->getSort(); $page = $pagerQuery->getPage(); diff --git a/db/migrations/20210720153027.php b/db/migrations/20210720153027.php index 80423561..fe48bbe8 100644 --- a/db/migrations/20210720153027.php +++ b/db/migrations/20210720153027.php @@ -20,6 +20,7 @@ final class V20210720153027 extends AbstractMigration $this->handleTagScopes(); $this->handleCategoryIcon(); $this->handleReviewPublish(); + $this->handleConsultPublish(); } protected function createCourseTagTable() @@ -189,6 +190,21 @@ final class V20210720153027 extends AbstractMigration ->execute(); } + protected function handleConsultPublish() + { + $this->getQueryBuilder() + ->update('kg_review') + ->set('published', 2) + ->where(['published' => 1]) + ->execute(); + + $this->getQueryBuilder() + ->update('kg_review') + ->set('published', 3) + ->where(['published' => 0]) + ->execute(); + } + protected function handleRoleRoutes() { $roles = $this->getQueryBuilder()