diff --git a/app/Http/Home/Views/consult/reply.volt b/app/Http/Home/Views/consult/reply.volt index a837c4ca..f2b67c07 100644 --- a/app/Http/Home/Views/consult/reply.volt +++ b/app/Http/Home/Views/consult/reply.volt @@ -5,14 +5,18 @@ {% set update_url = url({'for':'home.consult.reply','id':consult.id}) %}
-
- -
{{ consult.course.title }}
-
-
- -
{{ consult.chapter.title }}
-
+ {% if consult.course.id is defined %} +
+ +
{{ consult.course.title }}
+
+ {% endif %} + {% if consult.chapter.id is defined %} +
+ +
{{ consult.chapter.title }}
+
+ {% endif %}
{{ consult.question }}
diff --git a/app/Repos/TeacherConsult.php b/app/Repos/TeacherConsult.php new file mode 100644 index 00000000..7e8bda77 --- /dev/null +++ b/app/Repos/TeacherConsult.php @@ -0,0 +1,56 @@ +modelsManager->createBuilder() + ->columns('c.*') + ->addFrom(ConsultModel::class, 'c') + ->join(CourseUserModel::class, 'c.course_id = cu.course_id', 'cu') + ->where('1 = 1'); + + 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]); + } + + if (isset($where['replied'])) { + if ($where['replied'] == 1) { + $builder->andWhere('c.reply_time > 0'); + } else { + $builder->andWhere('c.reply_time = 0'); + } + } + + switch ($sort) { + default: + $orderBy = 'c.id DESC'; + break; + } + + $builder->orderBy($orderBy); + + $pager = new PagerQueryBuilder([ + 'builder' => $builder, + 'page' => $page, + 'limit' => $limit, + ]); + + return $pager->paginate(); + } + +} diff --git a/app/Services/Logic/Teacher/Console/ConsultList.php b/app/Services/Logic/Teacher/Console/ConsultList.php index 4ac60694..11e99f8a 100644 --- a/app/Services/Logic/Teacher/Console/ConsultList.php +++ b/app/Services/Logic/Teacher/Console/ConsultList.php @@ -8,14 +8,9 @@ namespace App\Services\Logic\Teacher\Console; use App\Builders\ConsultList as ConsultListBuilder; -use App\Library\Paginator\Adapter\QueryBuilder as PagerQueryBuilder; use App\Library\Paginator\Query as PagerQuery; -use App\Models\Consult as ConsultModel; -use App\Models\Course as CourseModel; -use App\Models\CourseUser as CourseUserModel; +use App\Repos\TeacherConsult as TeacherConsultRepo; use App\Services\Logic\Service as LogicService; -use Phalcon\Mvc\Model\Resultset; -use Phalcon\Mvc\Model\ResultsetInterface; class ConsultList extends LogicService { @@ -27,16 +22,11 @@ class ConsultList extends LogicService $pagerQuery = new PagerQuery(); $params = $pagerQuery->getParams(); + $sort = $pagerQuery->getSort(); $page = $pagerQuery->getPage(); $limit = $pagerQuery->getLimit(); - $params['course_id'] = 0; - - $courses = $this->findTeachingCourses($user->id); - - if ($courses->count() > 0) { - $params['course_id'] = kg_array_column($courses->toArray(), 'id'); - } + $params['user_id'] = $user->id; $params['status'] = $params['status'] ?? null; @@ -46,7 +36,9 @@ class ConsultList extends LogicService $params['replied'] = 1; } - $pager = $this->paginate($params, $page, $limit); + $repo = new TeacherConsultRepo(); + + $pager = $repo->paginate($params, $sort, $page, $limit); return $this->handleConsults($pager); } @@ -92,50 +84,4 @@ class ConsultList extends LogicService return $pager; } - protected function paginate($where, $page = 1, $limit = 15) - { - $builder = $this->modelsManager->createBuilder(); - - $builder->from(ConsultModel::class); - - $builder->where('published = 1'); - - if (!empty($where['course_id'])) { - $builder->inWhere('course_id', $where['course_id']); - } - - if (isset($where['replied'])) { - if ($where['replied'] == 1) { - $builder->andWhere('reply_time > 0'); - } else { - $builder->andWhere('reply_time = 0'); - } - } - - $builder->orderBy('priority ASC,id DESC'); - - $pager = new PagerQueryBuilder([ - 'builder' => $builder, - 'page' => $page, - 'limit' => $limit, - ]); - - return $pager->paginate(); - } - - /** - * @param int $userId - * @return ResultsetInterface|Resultset|CourseModel[] - */ - protected function findTeachingCourses($userId) - { - return $this->modelsManager->createBuilder() - ->columns('c.*') - ->addFrom(CourseModel::class, 'c') - ->join(CourseUserModel::class, 'c.id = cu.course_id', 'cu') - ->where('cu.user_id = :user_id:', ['user_id' => $userId]) - ->andWhere('cu.role_type = :role_type:', ['role_type' => CourseUserModel::ROLE_TEACHER]) - ->getQuery()->execute(); - } - }