From c9828565642bd79582ef0b25b5fc71fd0357eeb8 Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Fri, 31 Jul 2020 19:37:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=A4=E7=BB=84=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Caches/ImNewGroupList.php | 1 + app/Http/Admin/Services/Course.php | 11 +++ app/Http/Web/Controllers/CourseController.php | 2 + .../Web/Controllers/ImGroupController.php | 21 +++++ app/Http/Web/Controllers/SearchController.php | 2 + .../Web/Controllers/TeacherController.php | 10 ++- app/Http/Web/Controllers/TopicController.php | 5 +- app/Http/Web/Controllers/UserController.php | 2 + app/Http/Web/Controllers/VipController.php | 2 + app/Http/Web/Services/Im.php | 1 + app/Http/Web/Services/ImGroup.php | 80 ++++++++++++++++++- app/Http/Web/Views/chapter/breadcrumb.volt | 15 ---- app/Http/Web/Views/course/show.volt | 4 +- app/Http/Web/Views/course/show_teacher.volt | 8 +- app/Http/Web/Views/im/find_groups.volt | 15 +++- app/Http/Web/Views/im/find_users.volt | 4 +- app/Http/Web/Views/im_group/edit.volt | 3 +- app/Http/Web/Views/im_group/list.volt | 20 +++++ app/Http/Web/Views/im_group/pager.volt | 30 +++++++ app/Http/Web/Views/im_group/show.volt | 43 ++++++++++ .../Web/Views/im_group/show_active_users.volt | 16 ++++ app/Http/Web/Views/im_group/show_owner.volt | 19 +++++ app/Http/Web/Views/teacher/list.volt | 2 +- .../topic/{ajax_courses.volt => courses.volt} | 0 app/Http/Web/Views/vip/users.volt | 7 +- app/Repos/Course.php | 13 +++ public/static/web/css/common.css | 46 ++++++----- public/static/web/js/group.list.js | 9 +++ public/static/web/js/teacher.list.js | 1 - 29 files changed, 333 insertions(+), 59 deletions(-) delete mode 100644 app/Http/Web/Views/chapter/breadcrumb.volt create mode 100644 app/Http/Web/Views/im_group/list.volt create mode 100644 app/Http/Web/Views/im_group/pager.volt create mode 100644 app/Http/Web/Views/im_group/show.volt create mode 100644 app/Http/Web/Views/im_group/show_active_users.volt create mode 100644 app/Http/Web/Views/im_group/show_owner.volt rename app/Http/Web/Views/topic/{ajax_courses.volt => courses.volt} (100%) create mode 100644 public/static/web/js/group.list.js diff --git a/app/Caches/ImNewGroupList.php b/app/Caches/ImNewGroupList.php index c127d0da..ff819b97 100644 --- a/app/Caches/ImNewGroupList.php +++ b/app/Caches/ImNewGroupList.php @@ -45,6 +45,7 @@ class ImNewGroupList extends Cache foreach ($groups as $group) { $result[] = [ 'id' => $group->id, + 'type' => $group->type, 'name' => $group->name, 'avatar' => $group->avatar, 'about' => $group->about, diff --git a/app/Http/Admin/Services/Course.php b/app/Http/Admin/Services/Course.php index 04ea4b02..b907e6d1 100644 --- a/app/Http/Admin/Services/Course.php +++ b/app/Http/Admin/Services/Course.php @@ -190,6 +190,8 @@ class Course extends Service $course->update($data); + $this->updateCourseGroup($course); + $this->rebuildCourseIndex($course); return $course; @@ -365,6 +367,15 @@ class Course extends Service return $validator->checkCourse($id); } + protected function updateCourseGroup(CourseModel $course) + { + $courseRepo = new CourseRepo(); + + $imGroup = $courseRepo->findImGroup($course->id); + + $imGroup->update(['name' => $course->title]); + } + protected function rebuildCourseCache(CourseModel $course) { $cache = new CourseCache(); diff --git a/app/Http/Web/Controllers/CourseController.php b/app/Http/Web/Controllers/CourseController.php index ba96a028..1d6f1dd7 100644 --- a/app/Http/Web/Controllers/CourseController.php +++ b/app/Http/Web/Controllers/CourseController.php @@ -38,6 +38,8 @@ class CourseController extends Controller $sorts = $service->handleSorts(); $params = $service->getParams(); + $this->siteSeo->prependTitle('课程'); + $this->view->setVar('top_categories', $topCategories); $this->view->setVar('sub_categories', $subCategories); $this->view->setVar('models', $models); diff --git a/app/Http/Web/Controllers/ImGroupController.php b/app/Http/Web/Controllers/ImGroupController.php index 10fe63a7..61c452c5 100644 --- a/app/Http/Web/Controllers/ImGroupController.php +++ b/app/Http/Web/Controllers/ImGroupController.php @@ -3,6 +3,7 @@ namespace App\Http\Web\Controllers; use App\Http\Web\Services\ImGroup as ImGroupService; +use Phalcon\Mvc\View; /** * @RoutePrefix("/im/group") @@ -15,7 +16,23 @@ class ImGroupController extends Controller */ public function listAction() { + $this->siteSeo->prependTitle('群组'); + } + /** + * @Get("/pager", name="web.im_group.pager") + */ + public function pagerAction() + { + $service = new ImGroupService(); + + $pager = $service->getGroups(); + $pager->items = kg_array_object($pager->items); + $pager->target = 'group-list'; + + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + $this->view->pick('im_group/pager'); + $this->view->setVar('pager', $pager); } /** @@ -23,7 +40,11 @@ class ImGroupController extends Controller */ public function showAction($id) { + $service = new ImGroupService(); + $group = $service->getGroup($id); + + $this->view->setVar('group', $group); } /** diff --git a/app/Http/Web/Controllers/SearchController.php b/app/Http/Web/Controllers/SearchController.php index 22a34bed..21491c21 100644 --- a/app/Http/Web/Controllers/SearchController.php +++ b/app/Http/Web/Controllers/SearchController.php @@ -26,6 +26,8 @@ class SearchController extends Controller return $this->response->redirect(['for' => 'web.course.list']); } + $this->siteSeo->prependTitle([$query, '搜索']); + $service = new CourseHotQueryService(); $hotQueries = $service->handle(); diff --git a/app/Http/Web/Controllers/TeacherController.php b/app/Http/Web/Controllers/TeacherController.php index e443084c..a6cd9b3a 100644 --- a/app/Http/Web/Controllers/TeacherController.php +++ b/app/Http/Web/Controllers/TeacherController.php @@ -16,7 +16,7 @@ class TeacherController extends Controller */ public function listAction() { - + $this->siteSeo->prependTitle('教师'); } /** @@ -38,9 +38,13 @@ class TeacherController extends Controller /** * @Get("/{id:[0-9]+}", name="web.teacher.show") */ - public function showAction() + public function showAction($id) { - + return $this->dispatcher->forward([ + 'controller' => 'user', + 'action' => 'show', + 'params' => ['id' => $id], + ]); } } diff --git a/app/Http/Web/Controllers/TopicController.php b/app/Http/Web/Controllers/TopicController.php index 413488e9..255f64e4 100644 --- a/app/Http/Web/Controllers/TopicController.php +++ b/app/Http/Web/Controllers/TopicController.php @@ -21,6 +21,9 @@ class TopicController extends Controller $topic = $service->handle($id); + $this->siteSeo->prependTitle($topic['title']); + $this->siteSeo->setDescription($topic['summary']); + $this->view->setVar('topic', $topic); } @@ -36,7 +39,7 @@ class TopicController extends Controller $pager->target = 'course-list'; $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); - $this->view->pick('topic/ajax_courses'); + $this->view->pick('topic/courses'); $this->view->setVar('pager', $pager); } diff --git a/app/Http/Web/Controllers/UserController.php b/app/Http/Web/Controllers/UserController.php index ff83d8d7..7c783dbb 100644 --- a/app/Http/Web/Controllers/UserController.php +++ b/app/Http/Web/Controllers/UserController.php @@ -24,6 +24,8 @@ class UserController extends Controller $user = $service->handle($id); + $this->siteSeo->prependTitle("{$user['name']}的个人主页"); + $this->view->setVar('user', $user); } diff --git a/app/Http/Web/Controllers/VipController.php b/app/Http/Web/Controllers/VipController.php index 187d00ca..dba5cb7f 100644 --- a/app/Http/Web/Controllers/VipController.php +++ b/app/Http/Web/Controllers/VipController.php @@ -22,6 +22,8 @@ class VipController extends Controller $vipOptions = $service->handle(); + $this->siteSeo->prependTitle('会员'); + $this->view->setVar('vip_options', $vipOptions); } diff --git a/app/Http/Web/Services/Im.php b/app/Http/Web/Services/Im.php index 93f4904c..121868b9 100644 --- a/app/Http/Web/Services/Im.php +++ b/app/Http/Web/Services/Im.php @@ -682,6 +682,7 @@ class Im extends Service $group['avatar'] = $baseUrl . $group['avatar']; $items[] = [ 'id' => $group['id'], + 'type' => $group['type'], 'name' => $group['name'], 'avatar' => $group['avatar'], 'about' => $group['about'], diff --git a/app/Http/Web/Services/ImGroup.php b/app/Http/Web/Services/ImGroup.php index f5ad239e..0c4aac57 100644 --- a/app/Http/Web/Services/ImGroup.php +++ b/app/Http/Web/Services/ImGroup.php @@ -2,9 +2,13 @@ namespace App\Http\Web\Services; +use App\Builders\ImGroupList as ImGroupListBuilder; use App\Builders\ImGroupUserList as ImGroupUserListBuilder; use App\Library\Paginator\Query as PagerQuery; +use App\Models\ImGroup as ImGroupModel; +use App\Repos\ImGroup as ImGroupRepo; use App\Repos\ImGroupUser as ImGroupUserRepo; +use App\Repos\User as UserRepo; use App\Validators\ImGroup as ImGroupValidator; use App\Validators\ImGroupUser as ImGroupUserValidator; @@ -13,7 +17,21 @@ class ImGroup extends Service public function getGroups() { + $pagerQuery = new PagerQuery(); + $params = $pagerQuery->getParams(); + + $params['published'] = 1; + + $sort = $pagerQuery->getSort(); + $page = $pagerQuery->getPage(); + $limit = $pagerQuery->getLimit(); + + $groupRepo = new ImGroupRepo(); + + $pager = $groupRepo->paginate($params, $sort, $page, $limit); + + return $this->handleGroups($pager); } public function updateGroup($id) @@ -30,7 +48,10 @@ class ImGroup extends Service $data = []; - if (!empty($post['name'])) { + /** + * 课程群组不允许改名 + */ + if (!empty($post['name']) && $group->type == ImGroupModel::TYPE_CHAT) { $data['name'] = $validator->checkName($post['name']); } @@ -51,7 +72,25 @@ class ImGroup extends Service { $validator = new ImGroupValidator(); - return $validator->checkGroup($id); + $group = $validator->checkGroup($id); + + $userRepo = new UserRepo(); + + $owner = $userRepo->findById($group->owner_id); + + return [ + 'id' => $group->id, + 'name' => $group->name, + 'about' => $group->about, + 'user_count' => $group->user_count, + 'owner' => [ + 'id' => $owner->id, + 'name' => $owner->name, + 'avatar' => $owner->avatar, + 'title' => $owner->title, + 'about' => $owner->about, + ], + ]; } public function getGroupUsers($id) @@ -116,4 +155,41 @@ class ImGroup extends Service return $pager; } + protected function handleGroups($pager) + { + if ($pager->total_items == 0) { + return $pager; + } + + $builder = new ImGroupListBuilder(); + + $groups = $pager->items->toArray(); + + $users = $builder->getUsers($groups); + + $baseUrl = kg_ci_base_url(); + + $items = []; + + foreach ($groups as $group) { + + $group['avatar'] = $baseUrl . $group['avatar']; + $group['owner'] = $users[$group['owner_id']] ?? new \stdClass(); + + $items[] = [ + 'id' => $group['id'], + 'type' => $group['type'], + 'name' => $group['name'], + 'avatar' => $group['avatar'], + 'about' => $group['about'], + 'user_count' => $group['user_count'], + 'owner' => $group['owner'], + ]; + } + + $pager->items = $items; + + return $pager; + } + } diff --git a/app/Http/Web/Views/chapter/breadcrumb.volt b/app/Http/Web/Views/chapter/breadcrumb.volt deleted file mode 100644 index 40243c39..00000000 --- a/app/Http/Web/Views/chapter/breadcrumb.volt +++ /dev/null @@ -1,15 +0,0 @@ - \ No newline at end of file diff --git a/app/Http/Web/Views/course/show.volt b/app/Http/Web/Views/course/show.volt index 14b98c15..703081d4 100644 --- a/app/Http/Web/Views/course/show.volt +++ b/app/Http/Web/Views/course/show.volt @@ -18,12 +18,12 @@ {% endfor %} {{ course.title }} -
+
+ {{ partial('course/show_meta') }} diff --git a/app/Http/Web/Views/course/show_teacher.volt b/app/Http/Web/Views/course/show_teacher.volt index 78d281e3..e1c9523d 100644 --- a/app/Http/Web/Views/course/show_teacher.volt +++ b/app/Http/Web/Views/course/show_teacher.volt @@ -4,16 +4,16 @@
{% for teacher in course.teachers %} {% set teacher_url = url({'for':'web.user.show','id':teacher.id}) %} -