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 @@