From cdc174acdcbeb965834944575e91bb932030ffb5 Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Wed, 14 Oct 2020 09:57:45 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0index=5Ftpl=5Ftype=3Dsi?= =?UTF-8?q?mple=E6=97=B6=E9=87=8D=E5=BB=BA=E7=BC=93=E5=AD=98=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Tasks/MaintainTask.php | 36 +++++++++++++++++++++++++----- app/Console/Tasks/Task.php | 2 +- app/Console/Tasks/UpgradeTask.php | 6 ----- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/app/Console/Tasks/MaintainTask.php b/app/Console/Tasks/MaintainTask.php index f360db8f..9ac60365 100644 --- a/app/Console/Tasks/MaintainTask.php +++ b/app/Console/Tasks/MaintainTask.php @@ -4,6 +4,9 @@ namespace App\Console\Tasks; use App\Caches\IndexFreeCourseList as IndexFreeCourseListCache; use App\Caches\IndexNewCourseList as IndexNewCourseListCache; +use App\Caches\IndexSimpleFreeCourseList as IndexSimpleFreeCourseListCache; +use App\Caches\IndexSimpleNewCourseList as IndexSimpleNewCourseListCache; +use App\Caches\IndexSimpleVipCourseList as IndexSimpleVipCourseListCache; use App\Caches\IndexVipCourseList as IndexVipCourseListCache; use App\Http\Admin\Services\Setting as SettingService; use App\Library\Utils\Password as PasswordUtil; @@ -22,20 +25,41 @@ class MaintainTask extends Task { $section = $params[0] ?? null; + $site = $this->getSettings('site'); + + $type = $site['index_tpl_type'] ?: 'full'; + if (!$section || $section == 'new_course') { - $cache = new IndexNewCourseListCache(); - $cache->rebuild(); + if ($type == 'full') { + $cache = new IndexNewCourseListCache(); + $cache->rebuild(); + } else { + $cache = new IndexSimpleNewCourseListCache(); + $cache->rebuild(); + } } if (!$section || $section == 'free_course') { - $cache = new IndexFreeCourseListCache(); - $cache->rebuild(); + if ($type == 'full') { + $cache = new IndexFreeCourseListCache(); + $cache->rebuild(); + } else { + $cache = new IndexSimpleFreeCourseListCache(); + $cache->rebuild(); + } } if (!$section || $section == 'vip_course') { - $cache = new IndexVipCourseListCache(); - $cache->rebuild(); + if ($type == 'full') { + $cache = new IndexVipCourseListCache(); + $cache->rebuild(); + } else { + $cache = new IndexSimpleVipCourseListCache(); + $cache->rebuild(); + } } + + echo 'rebuild index course cache success' . PHP_EOL; } /** diff --git a/app/Console/Tasks/Task.php b/app/Console/Tasks/Task.php index 6478ed18..350cb5ec 100644 --- a/app/Console/Tasks/Task.php +++ b/app/Console/Tasks/Task.php @@ -41,7 +41,7 @@ class Task extends \Phalcon\Cli\Task { $appService = new AppService(); - return $appService->getLogger($section); + return $appService->getSettings($section); } } diff --git a/app/Console/Tasks/UpgradeTask.php b/app/Console/Tasks/UpgradeTask.php index 13bb53fb..8700703d 100644 --- a/app/Console/Tasks/UpgradeTask.php +++ b/app/Console/Tasks/UpgradeTask.php @@ -43,7 +43,6 @@ class UpgradeTask extends Task public function resetAnnotationAction() { $config = $this->getConfig(); - $redis = $this->getRedis(); $dbIndex = $config->path('annotation.db'); @@ -56,9 +55,7 @@ class UpgradeTask extends Task echo "start reset annotation..." . PHP_EOL; if (count($keys) > 0) { - $keys = $this->handlePhKeys($keys); - $redis->del(...$keys); $redis->del($statsKey); } @@ -74,7 +71,6 @@ class UpgradeTask extends Task public function resetMetadataAction() { $config = $this->getConfig(); - $redis = $this->getRedis(); $dbIndex = $config->path('metadata.db'); @@ -87,9 +83,7 @@ class UpgradeTask extends Task echo "start reset metadata..." . PHP_EOL; if (count($keys) > 0) { - $keys = $this->handlePhKeys($keys); - $redis->del(...$keys); $redis->del($statsKey); } From ee20552eebf4c081298a331d42a1907e85fc174f Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Mon, 26 Oct 2020 19:59:46 +0800 Subject: [PATCH 02/16] =?UTF-8?q?1.=E4=BF=AE=E6=AD=A3=E6=8F=92=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E7=AE=A1=E7=90=86=E5=B8=90=E5=8F=B7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=202.=E4=BF=AE=E6=AD=A3=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Admin/Services/AuthMenu.php | 2 +- db/migrations/20200827113559_insert_user_data.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Admin/Services/AuthMenu.php b/app/Http/Admin/Services/AuthMenu.php index 8abcfdc1..1d69cd21 100644 --- a/app/Http/Admin/Services/AuthMenu.php +++ b/app/Http/Admin/Services/AuthMenu.php @@ -77,7 +77,7 @@ class AuthMenu extends Component foreach ($routeIdMapping as $key => $value) { $ids = explode('-', $value); - if (in_array($key, $this->authInfo['routes'])) { + if (is_array($this->authInfo['routes']) && in_array($key, $this->authInfo['routes'])) { $owned1stLevelIds[] = $ids[0]; $owned2ndLevelIds[] = $ids[0] . '-' . $ids[1]; $owned3rdLevelIds[] = $value; diff --git a/db/migrations/20200827113559_insert_user_data.php b/db/migrations/20200827113559_insert_user_data.php index 7cae238a..a11ad937 100644 --- a/db/migrations/20200827113559_insert_user_data.php +++ b/db/migrations/20200827113559_insert_user_data.php @@ -14,7 +14,7 @@ final class InsertUserData extends AbstractMigration $account = [ 'id' => 10000, 'email' => '10000@163.com', - 'password' => '772b6a120699280eb2cce32ec706656a', + 'password' => '1a1e4568f1a3740b8853a8a16e29bc87', 'salt' => 'MbZWxN3L', 'create_time' => $now, ]; From cbc2e5762a5d8ab8a79e351d6ac038a0aa294cc2 Mon Sep 17 00:00:00 2001 From: koogua Date: Tue, 10 Nov 2020 10:25:16 +0800 Subject: [PATCH 03/16] =?UTF-8?q?!11=20=E9=98=B6=E6=AE=B5=E6=80=A7?= =?UTF-8?q?=E5=90=88=E5=B9=B6=20*=20=E6=A0=B9=E6=8D=AEapp=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E4=BD=9C=E5=87=BA=E7=9B=B8=E5=BA=94=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20*=20=E8=B7=AF=E7=94=B1=E5=A2=9E=E5=8A=A0=E5=91=BD=E5=90=8Dna?= =?UTF-8?q?me,=E5=A2=9E=E5=8A=A0app=E5=BA=94=E7=94=A8=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?*=20=E5=AE=8C=E6=88=90=E5=9F=BA=E6=9C=ACAPI,=E5=A2=9E=E5=8A=A0h?= =?UTF-8?q?5=E5=92=8C=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Builders/CategoryTreeList.php | 33 ++-- app/Caches/App.php | 31 ++++ app/Http/Admin/Controllers/AppController.php | 127 ++++++++++++++ .../Admin/Controllers/UploadController.php | 48 +++--- app/Http/Admin/Services/App.php | 135 +++++++++++++++ app/Http/Admin/Services/AuthNode.php | 33 +++- app/Http/Admin/Views/app/add.volt | 41 +++++ app/Http/Admin/Views/app/edit.volt | 49 ++++++ app/Http/Admin/Views/app/list.volt | 83 ++++++++++ app/Http/Admin/Views/public/login.volt | 1 - .../Api/Controllers/AccountController.php | 113 +++++++++++++ .../Api/Controllers/ChapterController.php | 64 ++++++++ .../Api/Controllers/ChapterLiveController.php | 73 +++++++++ .../Api/Controllers/ConsultController.php | 97 +++++++++++ app/Http/Api/Controllers/Controller.php | 28 +++- app/Http/Api/Controllers/CourseController.php | 128 +++++++++++++++ app/Http/Api/Controllers/HelpController.php | 38 +++++ .../Api/Controllers/ImGroupController.php | 51 ++++++ app/Http/Api/Controllers/IndexController.php | 58 +++++-- app/Http/Api/Controllers/OrderController.php | 76 +++++++++ app/Http/Api/Controllers/PageController.php | 25 +++ app/Http/Api/Controllers/PublicController.php | 73 ++++++++- app/Http/Api/Controllers/RefundController.php | 78 +++++++++ app/Http/Api/Controllers/ReviewController.php | 97 +++++++++++ app/Http/Api/Controllers/SearchController.php | 61 +++++++ .../Api/Controllers/TeacherController.php | 51 ++++++ app/Http/Api/Controllers/TradeController.php | 88 ++++++++++ app/Http/Api/Controllers/UploadController.php | 50 ++++++ .../Api/Controllers/UserConsoleController.php | 155 ++++++++++++++++++ app/Http/Api/Controllers/UserController.php | 77 +++++++++ app/Http/Api/Controllers/VerifyController.php | 38 +++++ app/Http/Api/Controllers/VipController.php | 40 +++++ app/Http/Api/Module.php | 4 +- app/Http/Api/Services/Account.php | 85 ++++++++++ app/Http/Api/Services/Login.php | 33 ---- app/Http/Api/Services/Logout.php | 17 -- app/Http/Api/Services/Trade.php | 125 ++++++++++++++ .../Home/Controllers/AccountController.php | 8 +- .../Home/Controllers/ChapterController.php | 28 ++-- .../Controllers/ChapterLiveController.php | 3 - .../Home/Controllers/ConsultController.php | 37 +++-- app/Http/Home/Controllers/Controller.php | 1 + app/Http/Home/Controllers/ImController.php | 19 +-- .../Controllers/ImGroupManageController.php | 8 +- app/Http/Home/Controllers/IndexController.php | 16 ++ app/Http/Home/Controllers/OrderController.php | 4 +- .../Home/Controllers/RefundController.php | 8 +- .../Home/Controllers/ReviewController.php | 8 +- .../Home/Controllers/SearchController.php | 11 -- .../Home/Controllers/UploadController.php | 16 +- .../Home/Controllers/VerifyController.php | 13 -- app/Http/Home/Services/Account.php | 14 +- app/Http/Home/Views/course/show_catalog.volt | 2 +- app/Http/Home/Views/macros/course.volt | 10 +- app/Http/Home/Views/order/confirm.volt | 4 +- app/Models/App.php | 136 +++++++++++++++ app/Models/AppVersion.php | 126 ++++++++++++++ app/Models/Client.php | 28 +++- app/Repos/App.php | 78 +++++++++ app/Services/Auth/Api.php | 9 +- app/Services/Logic/Consult/ConsultInfo.php | 83 ++++++---- app/Services/Logic/Course/BasicInfo.php | 1 + app/Services/Logic/Course/CategoryList.php | 19 +++ app/Services/Logic/Course/CourseList.php | 28 ++++ app/Services/Logic/Im/GroupInfo.php | 42 +++++ app/Services/Logic/Im/GroupList.php | 70 ++++++++ app/Services/Logic/Im/GroupUserList.php | 61 +++++++ app/Services/Logic/ImGroupTrait.php | 17 ++ app/Services/Logic/Order/OrderInfo.php | 2 + app/Services/Logic/Refund/RefundCancel.php | 2 + app/Services/Logic/Review/ReviewCreate.php | 15 +- app/Services/Logic/Review/ReviewInfo.php | 42 ++++- app/Services/Logic/Teacher/CourseList.php | 57 +++++++ app/Services/Logic/Teacher/TeacherInfo.php | 2 +- .../Logic/User/Console/ConsultList.php | 1 + app/Services/Logic/User/Console/GroupList.php | 2 +- app/Services/Logic/User/CourseList.php | 1 + app/Services/Logic/Verify/VerifyCode.php | 36 ---- app/Services/Pay.php | 2 +- app/Services/Pay/Alipay.php | 64 +++++++- app/Services/Pay/Wxpay.php | 64 +++++++- app/Traits/Client.php | 18 +- app/Traits/Response.php | 49 +++++- app/Traits/Security.php | 9 +- app/Validators/ApiSecurity.php | 133 +++++++++++++++ app/Validators/App.php | 73 +++++++++ app/Validators/Client.php | 46 ++++++ app/Validators/Security.php | 16 +- config/config.default.php | 10 ++ public/h5/index.html | 10 ++ public/static/home/js/order.pay.js | 2 +- 91 files changed, 3633 insertions(+), 335 deletions(-) create mode 100644 app/Caches/App.php create mode 100644 app/Http/Admin/Controllers/AppController.php create mode 100644 app/Http/Admin/Services/App.php create mode 100644 app/Http/Admin/Views/app/add.volt create mode 100644 app/Http/Admin/Views/app/edit.volt create mode 100644 app/Http/Admin/Views/app/list.volt create mode 100644 app/Http/Api/Controllers/AccountController.php create mode 100644 app/Http/Api/Controllers/ChapterController.php create mode 100644 app/Http/Api/Controllers/ChapterLiveController.php create mode 100644 app/Http/Api/Controllers/ConsultController.php create mode 100644 app/Http/Api/Controllers/CourseController.php create mode 100644 app/Http/Api/Controllers/HelpController.php create mode 100644 app/Http/Api/Controllers/ImGroupController.php create mode 100644 app/Http/Api/Controllers/OrderController.php create mode 100644 app/Http/Api/Controllers/PageController.php create mode 100644 app/Http/Api/Controllers/RefundController.php create mode 100644 app/Http/Api/Controllers/ReviewController.php create mode 100644 app/Http/Api/Controllers/SearchController.php create mode 100644 app/Http/Api/Controllers/TeacherController.php create mode 100644 app/Http/Api/Controllers/TradeController.php create mode 100644 app/Http/Api/Controllers/UploadController.php create mode 100644 app/Http/Api/Controllers/UserConsoleController.php create mode 100644 app/Http/Api/Controllers/UserController.php create mode 100644 app/Http/Api/Controllers/VerifyController.php create mode 100644 app/Http/Api/Controllers/VipController.php create mode 100644 app/Http/Api/Services/Account.php delete mode 100644 app/Http/Api/Services/Login.php delete mode 100644 app/Http/Api/Services/Logout.php create mode 100644 app/Http/Api/Services/Trade.php create mode 100644 app/Models/App.php create mode 100644 app/Models/AppVersion.php create mode 100644 app/Repos/App.php create mode 100644 app/Services/Logic/Course/CategoryList.php create mode 100644 app/Services/Logic/Im/GroupInfo.php create mode 100644 app/Services/Logic/Im/GroupList.php create mode 100644 app/Services/Logic/Im/GroupUserList.php create mode 100644 app/Services/Logic/ImGroupTrait.php create mode 100644 app/Services/Logic/Teacher/CourseList.php delete mode 100644 app/Services/Logic/Verify/VerifyCode.php create mode 100644 app/Validators/ApiSecurity.php create mode 100644 app/Validators/App.php create mode 100644 app/Validators/Client.php create mode 100644 public/h5/index.html diff --git a/app/Builders/CategoryTreeList.php b/app/Builders/CategoryTreeList.php index dbc32de9..944b5236 100644 --- a/app/Builders/CategoryTreeList.php +++ b/app/Builders/CategoryTreeList.php @@ -11,7 +11,7 @@ class CategoryTreeList extends Builder public function handle($type) { - $topCategories = $this->findChildCategories($type, 0); + $topCategories = $this->findTopCategories($type); if ($topCategories->count() == 0) { return []; @@ -32,7 +32,7 @@ class CategoryTreeList extends Builder protected function handleChildren(CategoryModel $category) { - $subCategories = $this->findChildCategories($category->type, $category->id); + $subCategories = $this->findChildCategories($category->id); if ($subCategories->count() == 0) { return []; @@ -51,24 +51,31 @@ class CategoryTreeList extends Builder } /** - * @param string $type + * @param int $type + * @return ResultsetInterface|Resultset|CategoryModel[] + */ + protected function findTopCategories($type) + { + $query = CategoryModel::query(); + + $query->where('parent_id = 0'); + $query->andWhere('published = 1'); + $query->andWhere('type = :type:', ['type' => $type]); + $query->orderBy('priority ASC'); + + return $query->execute(); + } + + /** * @param int $parentId * @return ResultsetInterface|Resultset|CategoryModel[] */ - protected function findChildCategories($type = 'course', $parentId = 0) + protected function findChildCategories($parentId) { $query = CategoryModel::query(); $query->where('published = 1'); - - if ($type) { - $query->andWhere('type = :type:', ['type' => $type]); - } - - if ($parentId) { - $query->andWhere('parent_id = :parent_id:', ['parent_id' => $parentId]); - } - + $query->andWhere('parent_id = :parent_id:', ['parent_id' => $parentId]); $query->orderBy('priority ASC'); return $query->execute(); diff --git a/app/Caches/App.php b/app/Caches/App.php new file mode 100644 index 00000000..479ca191 --- /dev/null +++ b/app/Caches/App.php @@ -0,0 +1,31 @@ +lifetime; + } + + public function getKey($id = null) + { + return "app:{$id}"; + } + + public function getContent($id = null) + { + $appRepo = new AppRepo(); + + $result = $appRepo->findByAppKey($id); + + return $result ?: null; + } + +} diff --git a/app/Http/Admin/Controllers/AppController.php b/app/Http/Admin/Controllers/AppController.php new file mode 100644 index 00000000..5871cb68 --- /dev/null +++ b/app/Http/Admin/Controllers/AppController.php @@ -0,0 +1,127 @@ +getApps(); + + $this->view->setVar('pager', $pager); + } + + /** + * @Get("/add", name="admin.app.add") + */ + public function addAction() + { + $appService = new AppService(); + + $types = $appService->getAppTypes(); + + $this->view->setVar('types', $types); + } + + /** + * @Post("/create", name="admin.app.create") + */ + public function createAction() + { + $appService = new AppService(); + + $appService->createApp(); + + $location = $this->url->get(['for' => 'admin.app.list']); + + $content = [ + 'location' => $location, + 'msg' => '创建应用成功', + ]; + + return $this->jsonSuccess($content); + } + + /** + * @Get("/{id:[0-9]+}/edit", name="admin.app.edit") + */ + public function editAction($id) + { + $appService = new AppService; + + $app = $appService->getApp($id); + $types = $appService->getAppTypes(); + + $this->view->setVar('app', $app); + $this->view->setVar('types', $types); + } + + /** + * @Post("/{id:[0-9]+}/update", name="admin.app.update") + */ + public function updateAction($id) + { + $appService = new AppService(); + + $appService->updateApp($id); + + $location = $this->url->get(['for' => 'admin.app.list']); + + $content = [ + 'location' => $location, + 'msg' => '更新应用成功', + ]; + + return $this->jsonSuccess($content); + } + + /** + * @Post("/{id:[0-9]+}/delete", name="admin.app.delete") + */ + public function deleteAction($id) + { + $appService = new AppService(); + + $appService->deleteApp($id); + + $location = $this->request->getHTTPReferer(); + + $content = [ + 'location' => $location, + 'msg' => '删除应用成功', + ]; + + return $this->jsonSuccess($content); + } + + /** + * @Post("/{id:[0-9]+}/restore", name="admin.app.restore") + */ + public function restoreAction($id) + { + $appService = new AppService(); + + $appService->restoreApp($id); + + $location = $this->request->getHTTPReferer(); + + $content = [ + 'location' => $location, + 'msg' => '还原应用成功', + ]; + + return $this->jsonSuccess($content); + } + +} diff --git a/app/Http/Admin/Controllers/UploadController.php b/app/Http/Admin/Controllers/UploadController.php index d180c70a..878b784a 100644 --- a/app/Http/Admin/Controllers/UploadController.php +++ b/app/Http/Admin/Controllers/UploadController.php @@ -19,16 +19,16 @@ class UploadController extends Controller $file = $service->uploadCoverImage(); - if ($file) { - return $this->jsonSuccess([ - 'data' => [ - 'src' => $service->getImageUrl($file->path), - 'title' => $file->name, - ] - ]); - } else { + if (!$file) { return $this->jsonError(['msg' => '上传文件失败']); } + + $data = [ + 'src' => $service->getImageUrl($file->path), + 'title' => $file->name, + ]; + + return $this->jsonSuccess(['data' => $data]); } /** @@ -40,16 +40,16 @@ class UploadController extends Controller $file = $service->uploadAvatarImage(); - if ($file) { - return $this->jsonSuccess([ - 'data' => [ - 'src' => $service->getImageUrl($file->path), - 'title' => $file->name, - ] - ]); - } else { + if (!$file) { return $this->jsonError(['msg' => '上传文件失败']); } + + $data = [ + 'src' => $service->getImageUrl($file->path), + 'title' => $file->name, + ]; + + return $this->jsonSuccess(['data' => $data]); } /** @@ -61,16 +61,16 @@ class UploadController extends Controller $file = $service->uploadContentImage(); - if ($file) { - return $this->jsonSuccess([ - 'data' => [ - 'src' => $service->getImageUrl($file->path), - 'title' => $file->name, - ] - ]); - } else { + if (!$file) { return $this->jsonError(['msg' => '上传文件失败']); } + + $data = [ + 'src' => $service->getImageUrl($file->path), + 'title' => $file->name, + ]; + + return $this->jsonSuccess(['data' => $data]); } /** diff --git a/app/Http/Admin/Services/App.php b/app/Http/Admin/Services/App.php new file mode 100644 index 00000000..100daf8a --- /dev/null +++ b/app/Http/Admin/Services/App.php @@ -0,0 +1,135 @@ +getParams(); + + $params['deleted'] = $params['deleted'] ?? 0; + + $sort = $pagerQuery->getSort(); + $page = $pagerQuery->getPage(); + $limit = $pagerQuery->getLimit(); + + $appRepo = new AppRepo(); + + return $appRepo->paginate($params, $sort, $page, $limit); + } + + public function getApp($id) + { + return $this->findOrFail($id); + } + + public function createApp() + { + $post = $this->request->getPost(); + + $validator = new AppValidator(); + + $data = []; + + $data['type'] = $validator->checkType($post['type']); + $data['name'] = $validator->checkName($post['name']); + $data['remark'] = $validator->checkRemark($post['remark']); + + $page = new AppModel(); + + $page->create($data); + + $this->rebuildAppCache($page); + + return $page; + } + + public function updateApp($id) + { + $app = $this->findOrFail($id); + + $post = $this->request->getPost(); + + $validator = new AppValidator(); + + $data = []; + + if (isset($post['type'])) { + $data['type'] = $validator->checkType($post['type']); + } + + if (isset($post['name'])) { + $data['name'] = $validator->checkName($post['name']); + } + + if (isset($post['remark'])) { + $data['remark'] = $validator->checkRemark($post['remark']); + } + + if (isset($post['published'])) { + $data['published'] = $validator->checkPublishStatus($post['published']); + } + + $app->update($data); + + $this->rebuildAppCache($app); + + return $app; + } + + public function deleteApp($id) + { + $app = $this->findOrFail($id); + + $app->deleted = 1; + + $app->update(); + + $this->rebuildAppCache($app); + + return $app; + } + + public function restoreApp($id) + { + $app = $this->findOrFail($id); + + $app->deleted = 0; + + $app->update(); + + $this->rebuildAppCache($app); + + return $app; + } + + public function getAppTypes() + { + return AppModel::types(); + } + + protected function rebuildAppCache(AppModel $app) + { + $cache = new AppCache(); + + $cache->rebuild($app->key); + } + + protected function findOrFail($id) + { + $validator = new AppValidator(); + + return $validator->checkApp($id); + } + +} diff --git a/app/Http/Admin/Services/AuthNode.php b/app/Http/Admin/Services/AuthNode.php index 86b54761..9f321357 100644 --- a/app/Http/Admin/Services/AuthNode.php +++ b/app/Http/Admin/Services/AuthNode.php @@ -671,7 +671,7 @@ class AuthNode extends Service { return [ 'id' => '5', - 'title' => '系统配置', + 'title' => '系统管理', 'children' => [ [ 'id' => '5-1', @@ -746,6 +746,37 @@ class AuthNode extends Service ], ], ], + [ + 'id' => '5-2', + 'title' => '应用管理', + 'type' => 'menu', + 'children' => [ + [ + 'id' => '5-2-1', + 'title' => '应用列表', + 'type' => 'menu', + 'route' => 'admin.app.list', + ], + [ + 'id' => '5-2-2', + 'title' => '添加应用', + 'type' => 'menu', + 'route' => 'admin.app.add', + ], + [ + 'id' => '5-2-3', + 'title' => '编辑应用', + 'type' => 'button', + 'route' => 'admin.app.edit', + ], + [ + 'id' => '5-2-4', + 'title' => '删除应用', + 'type' => 'button', + 'route' => 'admin.app.delete', + ], + ], + ], ], ]; } diff --git a/app/Http/Admin/Views/app/add.volt b/app/Http/Admin/Views/app/add.volt new file mode 100644 index 00000000..7ff4f88e --- /dev/null +++ b/app/Http/Admin/Views/app/add.volt @@ -0,0 +1,41 @@ +{% extends 'templates/main.volt' %} + +{% block content %} + +
+
+ 添加应用 +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/Http/Admin/Views/app/edit.volt b/app/Http/Admin/Views/app/edit.volt new file mode 100644 index 00000000..921acd3e --- /dev/null +++ b/app/Http/Admin/Views/app/edit.volt @@ -0,0 +1,49 @@ +{% extends 'templates/main.volt' %} + +{% block content %} + +
+
+ 编辑应用 +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/Http/Admin/Views/app/list.volt b/app/Http/Admin/Views/app/list.volt new file mode 100644 index 00000000..3c3a5394 --- /dev/null +++ b/app/Http/Admin/Views/app/list.volt @@ -0,0 +1,83 @@ +{% extends 'templates/main.volt' %} + +{% block content %} + + {%- macro type_info(value) %} + {% if value == 'pc' %} + PC客户端 + {% elseif value == 'h5' %} + H5客户端 + {% elseif value == 'ios' %} + IOS客户端 + {% elseif value == 'android' %} + Android客户端 + {% elseif value == 'mp_weixin' %} + 微信小程序 + {% elseif value == 'mp_alipay' %} + 支付宝小程序 + {% else %} + 未知 + {% endif %} + {%- endmacro %} + +
+
+ + 应用管理 + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + {% for item in pager.items %} + {% set edit_url = url({'for':'admin.app.edit','id':item.id}) %} + {% set update_url = url({'for':'admin.app.update','id':item.id}) %} + {% set delete_url = url({'for':'admin.app.delete','id':item.id}) %} + {% set restore_url = url({'for':'admin.app.restore','id':item.id}) %} + + + + + + + + + + {% endfor %} + +
编号名称类型Key / Secret创建时间发布操作
{{ item.id }}{{ item.name }}{{ type_info(item.type) }}{{ item.key }} / {{ item.secret }}{{ date('Y-m-d H:i:s',item.create_time) }} +
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/Http/Admin/Views/public/login.volt b/app/Http/Admin/Views/public/login.volt index 9b51cbd7..adcbcbc1 100644 --- a/app/Http/Admin/Views/public/login.volt +++ b/app/Http/Admin/Views/public/login.volt @@ -29,7 +29,6 @@ {% endif %}
- diff --git a/app/Http/Api/Controllers/AccountController.php b/app/Http/Api/Controllers/AccountController.php new file mode 100644 index 00000000..6ce03879 --- /dev/null +++ b/app/Http/Api/Controllers/AccountController.php @@ -0,0 +1,113 @@ +register(); + + return $this->jsonSuccess(['token' => $token]); + } + + /** + * @Post("/password/login", name="api.account.register") + */ + public function loginByPasswordAction() + { + $service = new AccountService(); + + $token = $service->loginByPassword(); + + return $this->jsonSuccess(['token' => $token]); + } + + /** + * @Post("/verify/login", name="api.account.verify_login") + */ + public function loginByVerifyAction() + { + $service = new AccountService(); + + $token = $service->loginByVerify(); + + return $this->jsonSuccess(['token' => $token]); + } + + /** + * @Get("/logout", name="api.account.logout") + */ + public function logoutAction() + { + $service = new AccountService(); + + $service->logout(); + + return $this->jsonSuccess(); + } + + /** + * @Post("/password/reset", name="api.account.reset_pwd") + */ + public function resetPasswordAction() + { + $service = new PasswordResetService(); + + $service->handle(); + + return $this->jsonSuccess(); + } + + /** + * @Post("/phone/update", name="api.account.update_phone") + */ + public function updatePhoneAction() + { + $service = new PhoneUpdateService(); + + $service->handle(); + + return $this->jsonSuccess(); + } + + /** + * @Post("/email/update", name="api.account.update_email") + */ + public function updateEmailAction() + { + $service = new EmailUpdateService(); + + $service->handle(); + + return $this->jsonSuccess(); + } + + /** + * @Post("/password/update", name="api.account.update_pwd") + */ + public function updatePasswordAction() + { + $service = new PasswordUpdateService(); + + $service->handle(); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Api/Controllers/ChapterController.php b/app/Http/Api/Controllers/ChapterController.php new file mode 100644 index 00000000..3e0a75eb --- /dev/null +++ b/app/Http/Api/Controllers/ChapterController.php @@ -0,0 +1,64 @@ +handle($id); + + return $this->jsonSuccess(['resources' => $resources]); + } + + /** + * @Get("/{id:[0-9]+}/info", name="api.chapter.info") + */ + public function infoAction($id) + { + $service = new ChapterInfoService(); + + $chapter = $service->handle($id); + + return $this->jsonSuccess(['chapter' => $chapter]); + } + + /** + * @Post("/{id:[0-9]+}/like", name="api.chapter.like") + */ + public function likeAction($id) + { + $service = new ChapterLikeService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/learning", name="api.chapter.learning") + */ + public function learningAction($id) + { + $service = new ChapterLearningService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Api/Controllers/ChapterLiveController.php b/app/Http/Api/Controllers/ChapterLiveController.php new file mode 100644 index 00000000..e54c9ad2 --- /dev/null +++ b/app/Http/Api/Controllers/ChapterLiveController.php @@ -0,0 +1,73 @@ +getRecentChats($id); + + return $this->jsonSuccess(['chats' => $chats]); + } + + /** + * @Get("/{id:[0-9]+}/stats", name="api.live.stats") + */ + public function statsAction($id) + { + $service = new ChapterLiveService(); + + $stats = $service->getStats($id); + + return $this->jsonSuccess(['stats' => $stats]); + } + + /** + * @Get("/{id:[0-9]+}/status", name="api.live.status") + */ + public function statusAction($id) + { + $service = new ChapterLiveService(); + + $status = $service->getStatus($id); + + return $this->jsonSuccess(['status' => $status]); + } + + /** + * @Post("/{id:[0-9]+}/user/bind", name="api.live.bind_user") + */ + public function bindUserAction($id) + { + $service = new ChapterLiveService(); + + $service->bindUser($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/msg/send", name="api.live.send_msg") + */ + public function sendMessageAction($id) + { + $service = new ChapterLiveService(); + + $message = $service->sendMessage($id); + + return $this->jsonSuccess(['message' => $message]); + } + +} diff --git a/app/Http/Api/Controllers/ConsultController.php b/app/Http/Api/Controllers/ConsultController.php new file mode 100644 index 00000000..79f3e03c --- /dev/null +++ b/app/Http/Api/Controllers/ConsultController.php @@ -0,0 +1,97 @@ +handle($id); + + return $this->jsonSuccess(['consult' => $consult]); + } + + /** + * @Post("/create", name="api.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="api.consult.update") + */ + public function updateAction($id) + { + $service = new ConsultUpdateService(); + + $consult = $service->handle($id); + + $service = new ConsultInfoService(); + + $consult = $service->handle($consult->id); + + return $this->jsonSuccess(['consult' => $consult]); + } + + /** + * @Post("/{id:[0-9]+}/delete", name="api.consult.delete") + */ + public function deleteAction($id) + { + $service = new ConsultDeleteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/like", name="api.consult.like") + */ + public function likeAction($id) + { + $service = new ConsultLikeService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/unlike", name="api.consult.unlike") + */ + public function unlikeAction($id) + { + $service = new ConsultLikeService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Api/Controllers/Controller.php b/app/Http/Api/Controllers/Controller.php index 24ae2d03..50a6611d 100644 --- a/app/Http/Api/Controllers/Controller.php +++ b/app/Http/Api/Controllers/Controller.php @@ -2,6 +2,7 @@ namespace App\Http\Api\Controllers; +use App\Services\Auth\Api as AppAuth; use App\Traits\Response as ResponseTrait; use App\Traits\Security as SecurityTrait; use Phalcon\Mvc\Dispatcher; @@ -14,7 +15,32 @@ class Controller extends \Phalcon\Mvc\Controller public function beforeExecuteRoute(Dispatcher $dispatcher) { - $this->checkRateLimit(); + /** + * 存在Origin头信息才设置跨域 + */ + if ($this->request->getHeader('Origin')) { + $this->setCors(); + } + + /** + * Options请求不验证签名和限流 + */ + if (!$this->request->isOptions()) { + //$this->checkApiSignature(); + //$this->checkRateLimit(); + } + + return true; + } + + protected function getAuthUser() + { + /** + * @var AppAuth $auth + */ + $auth = $this->getDI()->get('auth'); + + return $auth->getCurrentUser(); } } diff --git a/app/Http/Api/Controllers/CourseController.php b/app/Http/Api/Controllers/CourseController.php new file mode 100644 index 00000000..a130533b --- /dev/null +++ b/app/Http/Api/Controllers/CourseController.php @@ -0,0 +1,128 @@ +handle(); + + return $this->jsonSuccess(['categories' => $categories]); + } + + /** + * @Get("/list", name="api.course.list") + */ + public function listAction() + { + $service = new CourseListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/{id:[0-9]+}/info", name="api.course.info") + */ + public function infoAction($id) + { + $service = new CourseInfoService(); + + $course = $service->handle($id); + + return $this->jsonSuccess(['course' => $course]); + } + + /** + * @Get("/{id:[0-9]+}/chapters", name="api.course.chapters") + */ + public function chaptersAction($id) + { + $service = new CourseChapterListService(); + + $chapters = $service->handle($id); + + return $this->jsonSuccess(['chapters' => $chapters]); + } + + /** + * @Get("/{id:[0-9]+}/packages", name="api.course.packages") + */ + public function packagesAction($id) + { + $service = new CoursePackageListService(); + + $packages = $service->handle($id); + + return $this->jsonSuccess(['packages' => $packages]); + } + + /** + * @Get("/{id:[0-9]+}/consults", name="api.course.consults") + */ + public function consultsAction($id) + { + $service = new CourseConsultListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/{id:[0-9]+}/reviews", name="api.course.reviews") + */ + public function reviewsAction($id) + { + $service = new CourseReviewListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Post("/{id:[0-9]+}/favorite", name="api.course.favorite") + */ + public function favoriteAction($id) + { + $service = new CourseFavoriteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/unfavorite", name="api.course.unfavorite") + */ + public function unfavoriteAction($id) + { + $service = new CourseFavoriteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Api/Controllers/HelpController.php b/app/Http/Api/Controllers/HelpController.php new file mode 100644 index 00000000..60879eb3 --- /dev/null +++ b/app/Http/Api/Controllers/HelpController.php @@ -0,0 +1,38 @@ +handle(); + + return $this->jsonSuccess(['helps' => $helps]); + } + + /** + * @Get("/{id:[0-9]+}", name="api.help.info") + */ + public function infoAction($id) + { + $service = new HelpInfoService(); + + $help = $service->handle($id); + + return $this->jsonSuccess(['help' => $help]); + } + +} diff --git a/app/Http/Api/Controllers/ImGroupController.php b/app/Http/Api/Controllers/ImGroupController.php new file mode 100644 index 00000000..330d7c31 --- /dev/null +++ b/app/Http/Api/Controllers/ImGroupController.php @@ -0,0 +1,51 @@ +handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/{id:[0-9]+}/info", name="api.im_group.info") + */ + public function infoAction($id) + { + $service = new GroupInfoService(); + + $group = $service->handle($id); + + return $this->jsonSuccess(['group' => $group]); + } + + /** + * @Get("/{id:[0-9]+}/users", name="api.im_group.users") + */ + public function usersAction($id) + { + $service = new GroupUserListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + +} diff --git a/app/Http/Api/Controllers/IndexController.php b/app/Http/Api/Controllers/IndexController.php index b7c9f968..1aba3a64 100644 --- a/app/Http/Api/Controllers/IndexController.php +++ b/app/Http/Api/Controllers/IndexController.php @@ -2,39 +2,63 @@ namespace App\Http\Api\Controllers; +use App\Caches\IndexSimpleFreeCourseList; +use App\Caches\IndexSimpleNewCourseList; +use App\Caches\IndexSimpleVipCourseList; +use App\Caches\IndexSlideList; + /** - * @RoutePrefix("/api") + * @RoutePrefix("/api/index") */ class IndexController extends Controller { /** - * @Get("/", name="api.index") + * @Get("/slides", name="api.index.slides") */ - public function indexAction() + public function slidesAction() { - return $this->jsonSuccess(['data' => 'ok']); + $cache = new IndexSlideList(); + + $slides = $cache->get(); + + return $this->jsonSuccess(['slides' => $slides]); } /** - * @Get("/routes", name="api.routes") + * @Get("/courses/new", name="api.index.new_courses") */ - public function routesAction() + public function newCoursesAction() { - $definitions = []; + $cache = new IndexSimpleNewCourseList(); - $routes = $this->router->getRoutes(); + $courses = $cache->get(); - foreach ($routes as $route) { - if (strpos($route->getPattern(), '/api') !== false) { - $definitions[] = [ - 'pattern' => $route->getPattern(), - 'methods' => $route->getHttpMethods(), - ]; - } - } + return $this->jsonSuccess(['courses' => $courses]); + } - return $this->jsonSuccess(['routes' => $definitions]); + /** + * @Get("/courses/free", name="api.index.free_courses") + */ + public function freeCoursesAction() + { + $cache = new IndexSimpleFreeCourseList(); + + $courses = $cache->get(); + + return $this->jsonSuccess(['courses' => $courses]); + } + + /** + * @Get("/courses/vip", name="api.index.vip_courses") + */ + public function vipCoursesAction() + { + $cache = new IndexSimpleVipCourseList(); + + $courses = $cache->get(); + + return $this->jsonSuccess(['courses' => $courses]); } } diff --git a/app/Http/Api/Controllers/OrderController.php b/app/Http/Api/Controllers/OrderController.php new file mode 100644 index 00000000..5aeb68fe --- /dev/null +++ b/app/Http/Api/Controllers/OrderController.php @@ -0,0 +1,76 @@ +request->getQuery('sn', 'string'); + + $service = new OrderInfoService(); + + $order = $service->handle($sn); + + return $this->jsonSuccess(['order' => $order]); + } + + /** + * @Get("/confirm", name="api.order.confirm") + */ + public function confirmAction() + { + $itemId = $this->request->getQuery('item_id', 'int'); + $itemType = $this->request->getQuery('item_type', 'int'); + + $service = new OrderConfirmService(); + + $confirm = $service->handle($itemId, $itemType); + + return $this->jsonSuccess(['confirm' => $confirm]); + + } + + /** + * @Post("/create", name="api.order.create") + */ + public function createAction() + { + $service = new OrderCreateService(); + + $order = $service->handle(); + + $service = new OrderInfoService(); + + $order = $service->handle($order->sn); + + return $this->jsonSuccess(['order' => $order]); + } + + /** + * @Post("/cancel", name="api.order.cancel") + */ + public function cancelAction() + { + $sn = $this->request->getPost('sn', 'string'); + + $service = new OrderCancelService(); + + $order = $service->handle($sn); + + return $this->jsonSuccess(['order' => $order]); + } + +} diff --git a/app/Http/Api/Controllers/PageController.php b/app/Http/Api/Controllers/PageController.php new file mode 100644 index 00000000..b18e31f6 --- /dev/null +++ b/app/Http/Api/Controllers/PageController.php @@ -0,0 +1,25 @@ +handle($id); + + return $this->jsonSuccess(['page' => $page]); + } + +} diff --git a/app/Http/Api/Controllers/PublicController.php b/app/Http/Api/Controllers/PublicController.php index f2f0a85c..27d98e64 100644 --- a/app/Http/Api/Controllers/PublicController.php +++ b/app/Http/Api/Controllers/PublicController.php @@ -2,14 +2,85 @@ namespace App\Http\Api\Controllers; +use App\Services\Logic\Reward\OptionList as RewardOptionList; +use App\Services\Logic\Vip\OptionList as VipOptionList; +use App\Services\Service as AppService; use App\Traits\Response as ResponseTrait; /** * @RoutePrefix("/api") */ -class PublicController extends \Phalcon\Mvc\Controller +class PublicController extends Controller { use ResponseTrait; + /** + * @Options("/{match:(.*)}", name="api.match_options") + */ + public function corsAction() + { + $this->response->setStatusCode(204); + + return $this->response; + } + + /** + * @Get("/now", name="api.public.now") + */ + public function nowAction() + { + return $this->jsonSuccess(['now' => time()]); + } + + /** + * @Get("/site/info", name="api.public.site_info") + */ + public function siteInfoAction() + { + $service = new AppService(); + + $site = $service->getSettings('site'); + + return $this->jsonSuccess(['site' => $site]); + } + + /** + * @Get("/captcha/info", name="api.public.captcha_info") + */ + public function captchaInfoAction() + { + $service = new AppService(); + + $captcha = $service->getSettings('captcha'); + + unset($captcha['secret_key']); + + return $this->jsonSuccess(['captcha' => $captcha]); + } + + /** + * @Get("/reward/options", name="api.public.reward_options") + */ + public function rewardOptionsAction() + { + $service = new RewardOptionList(); + + $options = $service->handle(); + + return $this->jsonSuccess(['options' => $options]); + } + + /** + * @Get("/vip/options", name="api.public.vip_options") + */ + public function vipOptionsAction() + { + $service = new VipOptionList(); + + $options = $service->handle(); + + return $this->jsonSuccess(['options' => $options]); + } + } diff --git a/app/Http/Api/Controllers/RefundController.php b/app/Http/Api/Controllers/RefundController.php new file mode 100644 index 00000000..018cf1cf --- /dev/null +++ b/app/Http/Api/Controllers/RefundController.php @@ -0,0 +1,78 @@ +request->getQuery('sn', 'string'); + + $service = new RefundConfirmService(); + + $confirm = $service->handle($sn); + + return $this->jsonSuccess(['confirm' => $confirm]); + } + + /** + * @Get("/info", name="api.refund.info") + */ + public function infoAction() + { + $sn = $this->request->getQuery('sn', 'string'); + + $service = new RefundInfoService(); + + $refund = $service->handle($sn); + + return $this->jsonSuccess(['refund' => $refund]); + } + + /** + * @Post("/create", name="api.refund.create") + */ + public function createAction() + { + $service = new RefundCreateService(); + + $refund = $service->handle(); + + $service = new RefundInfoService(); + + $refund = $service->handle($refund->sn); + + return $this->jsonSuccess(['refund' => $refund]); + } + + /** + * @Post("/cancel", name="api.refund.cancel") + */ + public function cancelAction() + { + $sn = $this->request->getPost('sn', 'string'); + + $service = new RefundCancelService(); + + $service->handle($sn); + + $service = new RefundInfoService(); + + $refund = $service->handle($sn); + + return $this->jsonSuccess(['refund' => $refund]); + } + +} diff --git a/app/Http/Api/Controllers/ReviewController.php b/app/Http/Api/Controllers/ReviewController.php new file mode 100644 index 00000000..7030ccbf --- /dev/null +++ b/app/Http/Api/Controllers/ReviewController.php @@ -0,0 +1,97 @@ +handle($id); + + return $this->jsonSuccess(['review' => $review]); + } + + /** + * @Post("/create", name="api.order.create") + */ + public function createAction() + { + $service = new ReviewCreateService(); + + $review = $service->handle(); + + $service = new ReviewInfoService(); + + $review = $service->handle($review->id); + + return $this->jsonSuccess(['review' => $review]); + } + + /** + * @Post("/{id:[0-9]+}/update", name="api.review.update") + */ + public function updateAction($id) + { + $service = new ReviewUpdateService(); + + $service->handle($id); + + $service = new ReviewInfoService(); + + $review = $service->handle($id); + + return $this->jsonSuccess(['review' => $review]); + } + + /** + * @Post("/{id:[0-9]+}/delete", name="api.review.delete") + */ + public function deleteAction($id) + { + $service = new ReviewDeleteService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/like", name="api.review.like") + */ + public function likeAction($id) + { + $service = new ReviewLikeService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + + /** + * @Post("/{id:[0-9]+}/unlike", name="api.review.unlike") + */ + public function unlikeAction($id) + { + $service = new ReviewLikeService(); + + $service->handle($id); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Api/Controllers/SearchController.php b/app/Http/Api/Controllers/SearchController.php new file mode 100644 index 00000000..e2a8dd32 --- /dev/null +++ b/app/Http/Api/Controllers/SearchController.php @@ -0,0 +1,61 @@ +request->get('query', ['trim', 'string']); + $type = $this->request->get('type', ['trim', 'string'], 'course'); + + $pager = [ + 'total_pages' => 0, + 'total_items' => 0, + 'items' => [], + ]; + + if (empty($query)) { + return $this->jsonSuccess(['pager' => $pager]); + } + + $service = $this->getSearchService($type); + + $pager = $service->search(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @param string $type + * @return CourseSearchService|GroupSearchService|UserSearchService + */ + protected function getSearchService($type) + { + switch ($type) { + case 'group': + $service = new GroupSearchService; + break; + case 'user': + $service = new UserSearchService(); + break; + default: + $service = new CourseSearchService(); + break; + } + + return $service; + } + +} diff --git a/app/Http/Api/Controllers/TeacherController.php b/app/Http/Api/Controllers/TeacherController.php new file mode 100644 index 00000000..f9c000a7 --- /dev/null +++ b/app/Http/Api/Controllers/TeacherController.php @@ -0,0 +1,51 @@ +handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/{id:[0-9]+}/info", name="api.teacher.info") + */ + public function infoAction($id) + { + $service = new TeacherInfoService(); + + $teacher = $service->handle($id); + + return $this->jsonSuccess(['teacher' => $teacher]); + } + + /** + * @Get("/{id:[0-9]+}/courses", name="api.teacher.courses") + */ + public function coursesAction($id) + { + $service = new CourseListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + +} diff --git a/app/Http/Api/Controllers/TradeController.php b/app/Http/Api/Controllers/TradeController.php new file mode 100644 index 00000000..f9252452 --- /dev/null +++ b/app/Http/Api/Controllers/TradeController.php @@ -0,0 +1,88 @@ +request->getQuery('sn', 'string'); + + $service = new TradeInfoService(); + + $trade = $service->handle($sn); + + return $this->jsonSuccess(['trade' => $trade]); + } + + /** + * @Get("/h5/pay", name="api.trade.h5_pay") + */ + public function h5PayAction() + { + $sn = $this->request->getQuery('sn', 'string'); + + $service = new TradeService(); + + $response = $service->h5Pay($sn); + + if (!$response) { + echo "H5支付跳转失败,请回退重试"; + } + + $response->send(); + + exit(); + } + + /** + * @Post("/h5/create", name="api.trade.h5_create") + */ + public function createH5TradeAction() + { + $service = new TradeService(); + + $trade = $service->createH5Trade(); + + $service = new TradeInfoService(); + + $trade = $service->handle($trade->sn); + + return $this->jsonSuccess(['trade' => $trade]); + } + + /** + * @Post("/mp/create", name="api.trade.mp_create") + */ + public function createMpTradeAction() + { + $service = new TradeService(); + + $content = $service->createMpTrade(); + + return $this->jsonSuccess($content); + } + + /** + * @Post("/app/create", name="api.trade.app_create") + */ + public function createAppTradeAction() + { + $service = new TradeService(); + + $content = $service->createMpTrade(); + + return $this->jsonSuccess($content); + } + +} \ No newline at end of file diff --git a/app/Http/Api/Controllers/UploadController.php b/app/Http/Api/Controllers/UploadController.php new file mode 100644 index 00000000..40cf7a61 --- /dev/null +++ b/app/Http/Api/Controllers/UploadController.php @@ -0,0 +1,50 @@ +uploadAvatarImage(); + + if (!$file) { + return $this->jsonError(['msg' => '上传文件失败']); + } + + $data = [ + 'src' => $service->getImageUrl($file->path), + 'title' => $file->name, + ]; + + return $this->jsonSuccess(['data' => $data]); + } + + /** + * @Post("/im/img", name="api.upload.im_img") + */ + public function uploadImImageAction() + { + } + + /** + * @Post("/im/file", name="api.upload.im_file") + */ + public function uploadImFileAction() + { + + } + +} \ No newline at end of file diff --git a/app/Http/Api/Controllers/UserConsoleController.php b/app/Http/Api/Controllers/UserConsoleController.php new file mode 100644 index 00000000..671ff955 --- /dev/null +++ b/app/Http/Api/Controllers/UserConsoleController.php @@ -0,0 +1,155 @@ +handle(); + + return $this->jsonSuccess(['profile' => $profile]); + } + + /** + * @Get("/account", name="api.uc.account") + */ + public function accountAction() + { + $service = new AccountInfoService(); + + $account = $service->handle(); + + return $this->jsonSuccess(['account' => $account]); + } + + /** + * @Get("/courses", name="api.uc.courses") + */ + public function coursesAction() + { + $service = new CourseListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/favorites", name="api.uc.favorites") + */ + public function favoritesAction() + { + $service = new FavoriteListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/consults", name="api.uc.consults") + */ + public function consultsAction() + { + $service = new ConsultListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/reviews", name="api.uc.reviews") + */ + public function reviewsAction() + { + $service = new ReviewListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/orders", name="api.uc.orders") + */ + public function ordersAction() + { + $service = new OrderListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/refunds", name="api.uc.refunds") + */ + public function refundsAction() + { + $service = new RefundListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/friends", name="api.uc.friends") + */ + public function friendsAction() + { + $service = new FriendListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/groups", name="api.uc.groups") + */ + public function groupsAction() + { + $service = new GroupListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Post("/profile/update", name="api.uc.update_profile") + */ + public function updateProfileAction() + { + $service = new ProfileUpdateService(); + + $service->handle(); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Api/Controllers/UserController.php b/app/Http/Api/Controllers/UserController.php new file mode 100644 index 00000000..8bd37126 --- /dev/null +++ b/app/Http/Api/Controllers/UserController.php @@ -0,0 +1,77 @@ +handle($id); + + return $this->jsonSuccess(['user' => $user]); + } + + /** + * @Get("/{id:[0-9]+}/courses", name="api.user.courses") + */ + public function coursesAction($id) + { + $service = new UserCourseListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/{id:[0-9]+}/favorites", name="api.user.favorites") + */ + public function favoritesAction($id) + { + $service = new UserFavoriteListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/{id:[0-9]+}/friends", name="api.user.friends") + */ + public function friendsAction($id) + { + $service = new UserFriendListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/{id:[0-9]+}/groups", name="api.user.groups") + */ + public function groupsAction($id) + { + $service = new UserGroupListService(); + + $pager = $service->handle($id); + + return $this->jsonSuccess(['pager' => $pager]); + } + +} diff --git a/app/Http/Api/Controllers/VerifyController.php b/app/Http/Api/Controllers/VerifyController.php new file mode 100644 index 00000000..5594e7ab --- /dev/null +++ b/app/Http/Api/Controllers/VerifyController.php @@ -0,0 +1,38 @@ +handle(); + + return $this->jsonSuccess(); + } + + /** + * @Post("/email/code", name="api.verify.email_code") + */ + public function emailCodeAction() + { + $service = new EmailCodeService(); + + $service->handle(); + + return $this->jsonSuccess(); + } + +} diff --git a/app/Http/Api/Controllers/VipController.php b/app/Http/Api/Controllers/VipController.php new file mode 100644 index 00000000..a9854b11 --- /dev/null +++ b/app/Http/Api/Controllers/VipController.php @@ -0,0 +1,40 @@ +request->getQuery('type', 'string', 'discount'); + + $service = new VipCourseListService(); + + $pager = $service->handle($type); + + return $this->jsonSuccess(['pager' => $pager]); + } + + /** + * @Get("/users", name="api.vip.users") + */ + public function usersAction() + { + $service = new VipUserListService(); + + $pager = $service->handle(); + + return $this->jsonSuccess(['pager' => $pager]); + } + +} diff --git a/app/Http/Api/Module.php b/app/Http/Api/Module.php index 3ea77f24..684e10e6 100644 --- a/app/Http/Api/Module.php +++ b/app/Http/Api/Module.php @@ -2,7 +2,7 @@ namespace App\Http\Api; -use App\Services\Auth\Api as ApiAuth; +use App\Services\Auth\Api as AppAuth; use Phalcon\DiInterface; use Phalcon\Mvc\ModuleDefinitionInterface; use Phalcon\Mvc\View; @@ -24,7 +24,7 @@ class Module implements ModuleDefinitionInterface }); $di->setShared('auth', function () { - return new ApiAuth(); + return new AppAuth(); }); } diff --git a/app/Http/Api/Services/Account.php b/app/Http/Api/Services/Account.php new file mode 100644 index 00000000..96d09ce6 --- /dev/null +++ b/app/Http/Api/Services/Account.php @@ -0,0 +1,85 @@ +auth = $this->getDI()->get('auth'); + } + + public function register() + { + $service = new RegisterService(); + + $account = $service->handle(); + + $userRepo = new UserRepo(); + + $user = $userRepo->findById($account->id); + + return $this->auth->saveAuthInfo($user); + } + + public function loginByPassword() + { + $post = $this->request->getPost(); + + /** + * 使用[account|phone|email]做账户名字段兼容 + */ + if (isset($post['phone'])) { + $post['account'] = $post['phone']; + } elseif (isset($post['email'])) { + $post['account'] = $post['email']; + } + + $validator = new AccountValidator(); + + $user = $validator->checkUserLogin($post['account'], $post['password']); + + //$validator = new CaptchaValidator(); + + //$validator->checkCode($post['ticket'], $post['rand']); + + return $this->auth->saveAuthInfo($user); + } + + public function loginByVerify() + { + $post = $this->request->getPost(); + + /** + * 使用[account|phone|email]做账户名字段兼容 + */ + if (isset($post['phone'])) { + $post['account'] = $post['phone']; + } elseif (isset($post['email'])) { + $post['account'] = $post['email']; + } + + $validator = new AccountValidator(); + + $user = $validator->checkVerifyLogin($post['account'], $post['verify_code']); + + return $this->auth->saveAuthInfo($user); + } + + public function logout() + { + $this->auth->clearAuthInfo(); + } + +} diff --git a/app/Http/Api/Services/Login.php b/app/Http/Api/Services/Login.php deleted file mode 100644 index 7ffc50fe..00000000 --- a/app/Http/Api/Services/Login.php +++ /dev/null @@ -1,33 +0,0 @@ -checkUserLogin($name, $password); - - $auth = new ApiAuth(); - - return $auth->saveAuthInfo($user); - } - - public function loginByVerify($name, $code) - { - $validator = new AccountValidator(); - - $user = $validator->checkVerifyLogin($name, $code); - - $auth = new ApiAuth(); - - return $auth->saveAuthInfo($user); - } - -} diff --git a/app/Http/Api/Services/Logout.php b/app/Http/Api/Services/Logout.php deleted file mode 100644 index 76877ce8..00000000 --- a/app/Http/Api/Services/Logout.php +++ /dev/null @@ -1,17 +0,0 @@ -clearAuthInfo(); - } - -} diff --git a/app/Http/Api/Services/Trade.php b/app/Http/Api/Services/Trade.php new file mode 100644 index 00000000..74b3f7ae --- /dev/null +++ b/app/Http/Api/Services/Trade.php @@ -0,0 +1,125 @@ +checkTradeBySn($sn); + + $response = null; + + if ($trade->channel == TradeModel::CHANNEL_ALIPAY) { + $alipay = new Alipay(); + $response = $alipay->wap($trade); + } elseif ($trade->channel == TradeModel::CHANNEL_WXPAY) { + $wxpay = new Wxpay(); + $response = $wxpay->wap($trade); + } + + return $response; + } + + public function createH5Trade() + { + $post = $this->request->getPost(); + + $validator = new ClientValidator(); + + $platform = $this->getPlatform(); + + $validator->checkH5Platform($platform); + + $order = $this->checkOrderBySn($post['order_sn']); + + $user = $this->getLoginUser(); + + $validator = new TradeValidator(); + + $channel = $validator->checkChannel($post['channel']); + + $trade = new TradeModel(); + + $trade->subject = $order->subject; + $trade->amount = $order->amount; + $trade->channel = $channel; + $trade->order_id = $order->id; + $trade->owner_id = $user->id; + + $trade->create(); + + return $trade; + } + + public function createMpTrade() + { + $post = $this->request->getPost(); + + $validator = new ClientValidator(); + + $platform = $this->getPlatform(); + + $platform = $validator->checkMpPlatform($platform); + + $order = $this->checkOrderBySn($post['order_sn']); + + $user = $this->getLoginUser(); + + $channel = TradeModel::CHANNEL_WXPAY; + + if ($platform == ClientModel::TYPE_MP_ALIPAY) { + $channel = TradeModel::CHANNEL_ALIPAY; + } elseif ($platform == ClientModel::TYPE_MP_WEIXIN) { + $channel = TradeModel::CHANNEL_WXPAY; + } + + $trade = new TradeModel(); + + $trade->subject = $order->subject; + $trade->amount = $order->amount; + $trade->channel = $channel; + $trade->order_id = $order->id; + $trade->owner_id = $user->id; + + $trade->create(); + + $response = null; + + if ($post['channel'] == TradeModel::CHANNEL_ALIPAY) { + $alipay = new Alipay(); + $buyerId = ''; + $response = $alipay->mini($trade, $buyerId); + } elseif ($post['channel'] == TradeModel::CHANNEL_WXPAY) { + $wxpay = new Wxpay(); + $openId = ''; + $response = $wxpay->mini($trade, $openId); + } + + return $response; + } + + public function createAppTrade() + { + + } + + protected function getPlatform() + { + return $this->request->getHeader('X-Platform'); + } + +} diff --git a/app/Http/Home/Controllers/AccountController.php b/app/Http/Home/Controllers/AccountController.php index 4e2fc3d0..8dc2d285 100644 --- a/app/Http/Home/Controllers/AccountController.php +++ b/app/Http/Home/Controllers/AccountController.php @@ -81,9 +81,7 @@ class AccountController extends Controller $location = $returnUrl ?: $this->url->get(['for' => 'home.index']); - $content = ['location' => $location]; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['location' => $location]); } /** @@ -99,9 +97,7 @@ class AccountController extends Controller $location = $returnUrl ?: $this->url->get(['for' => 'home.index']); - $content = ['location' => $location]; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['location' => $location]); } /** diff --git a/app/Http/Home/Controllers/ChapterController.php b/app/Http/Home/Controllers/ChapterController.php index dace273d..4cc0cc3c 100644 --- a/app/Http/Home/Controllers/ChapterController.php +++ b/app/Http/Home/Controllers/ChapterController.php @@ -29,6 +29,18 @@ class ChapterController extends Controller $this->view->setVar('items', $items); } + /** + * @Get("/{id:[0-9]+}/danmus", name="home.chapter.danmus") + */ + public function danmusAction($id) + { + $service = new ChapterDanmuListService(); + + $items = $service->handle($id); + + return $this->jsonSuccess(['items' => $items]); + } + /** * @Get("/{id:[0-9]+}", name="home.chapter.show") */ @@ -75,18 +87,6 @@ class ChapterController extends Controller $this->view->setVar('catalog', $catalog); } - /** - * @Get("/{id:[0-9]+}/danmu", name="home.chapter.danmu") - */ - public function danmuAction($id) - { - $service = new ChapterDanmuListService(); - - $items = $service->handle($id); - - return $this->jsonSuccess(['items' => $items]); - } - /** * @Post("/{id:[0-9]+}/like", name="home.chapter.like") */ @@ -98,9 +98,7 @@ class ChapterController extends Controller $msg = $like->deleted == 0 ? '点赞成功' : '取消点赞成功'; - $content = ['msg' => $msg]; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => $msg]); } /** diff --git a/app/Http/Home/Controllers/ChapterLiveController.php b/app/Http/Home/Controllers/ChapterLiveController.php index 9261f92b..e68c33d0 100644 --- a/app/Http/Home/Controllers/ChapterLiveController.php +++ b/app/Http/Home/Controllers/ChapterLiveController.php @@ -3,7 +3,6 @@ namespace App\Http\Home\Controllers; use App\Http\Home\Services\ChapterLive as ChapterLiveService; -use App\Traits\Response as ResponseTrait; use Phalcon\Mvc\View; /** @@ -12,8 +11,6 @@ use Phalcon\Mvc\View; class ChapterLiveController extends Controller { - use ResponseTrait; - /** * @Get("/{id:[0-9]+}/chats", name="home.live.chats") */ diff --git a/app/Http/Home/Controllers/ConsultController.php b/app/Http/Home/Controllers/ConsultController.php index e31c1f32..93779f46 100644 --- a/app/Http/Home/Controllers/ConsultController.php +++ b/app/Http/Home/Controllers/ConsultController.php @@ -58,9 +58,12 @@ class ConsultController extends Controller $service = new ConsultInfoService(); - $service->handle($consult->id); + $consult = $service->handle($consult->id); - $content = ['msg' => '提交咨询成功']; + $content = [ + 'consult' => $consult, + 'msg' => '提交咨询成功', + ]; return $this->jsonSuccess($content); } @@ -72,9 +75,16 @@ class ConsultController extends Controller { $service = new ConsultUpdateService(); - $service->handle($id); + $consult = $service->handle($id); - $content = ['msg' => '更新咨询成功']; + $service = new ConsultInfoService(); + + $consult = $service->handle($consult->id); + + $content = [ + 'consult' => $consult, + 'msg' => '更新咨询成功', + ]; return $this->jsonSuccess($content); } @@ -88,9 +98,7 @@ class ConsultController extends Controller $service->handle($id); - $content = ['msg' => '删除咨询成功']; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => '删除咨询成功']); } /** @@ -102,9 +110,16 @@ class ConsultController extends Controller $service = new ConsultReplyService(); - $service->handle($id); + $consult = $service->handle($id); - $content = ['msg' => '回复咨询成功']; + $service = new ConsultInfoService(); + + $consult = $service->handle($consult->id); + + $content = [ + 'consult' => $consult, + 'msg' => '回复咨询成功', + ]; return $this->jsonSuccess($content); @@ -129,9 +144,7 @@ class ConsultController extends Controller $msg = $like->deleted == 0 ? '点赞成功' : '取消点赞成功'; - $content = ['msg' => $msg]; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => $msg]); } } diff --git a/app/Http/Home/Controllers/Controller.php b/app/Http/Home/Controllers/Controller.php index 30819779..df84d9d2 100644 --- a/app/Http/Home/Controllers/Controller.php +++ b/app/Http/Home/Controllers/Controller.php @@ -58,6 +58,7 @@ class Controller extends \Phalcon\Mvc\Controller 'controller' => 'error', 'action' => 'maintain', ]); + return false; } if ($this->isNotSafeRequest()) { diff --git a/app/Http/Home/Controllers/ImController.php b/app/Http/Home/Controllers/ImController.php index f768edb4..7461363e 100644 --- a/app/Http/Home/Controllers/ImController.php +++ b/app/Http/Home/Controllers/ImController.php @@ -3,7 +3,6 @@ namespace App\Http\Home\Controllers; use App\Http\Home\Services\Im as ImService; -use App\Traits\Response as ResponseTrait; use Phalcon\Mvc\View; /** @@ -12,8 +11,6 @@ use Phalcon\Mvc\View; class ImController extends Controller { - use ResponseTrait; - public function initialize() { parent::initialize(); @@ -265,9 +262,7 @@ class ImController extends Controller $service->applyFriend(); - $content = ['msg' => '发送申请成功,请等待对方通过']; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => '发送申请成功']); } /** @@ -303,9 +298,7 @@ class ImController extends Controller $service->applyGroup(); - $content = ['msg' => '发送申请成功,请等待管理员通过']; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => '发送申请成功']); } /** @@ -341,9 +334,7 @@ class ImController extends Controller $service->quitFriend($id); - $content = ['msg' => '解除好友成功']; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => '解除好友成功']); } /** @@ -355,9 +346,7 @@ class ImController extends Controller $service->quitGroup($id); - $content = ['msg' => '退出群组成功']; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => '退出群组成功']); } } diff --git a/app/Http/Home/Controllers/ImGroupManageController.php b/app/Http/Home/Controllers/ImGroupManageController.php index 3b76dcfc..f62bf1b1 100644 --- a/app/Http/Home/Controllers/ImGroupManageController.php +++ b/app/Http/Home/Controllers/ImGroupManageController.php @@ -48,9 +48,7 @@ class ImGroupManageController extends Controller $service->updateGroup($id); - $content = ['msg' => '更新群组成功']; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => '更新群组成功']); } /** @@ -62,8 +60,10 @@ class ImGroupManageController extends Controller $service->deleteGroupUser($gid, $uid); + $location = $this->request->getHTTPReferer(); + $content = [ - 'location' => $this->request->getHTTPReferer(), + 'location' => $location, 'msg' => '移除用户成功', ]; diff --git a/app/Http/Home/Controllers/IndexController.php b/app/Http/Home/Controllers/IndexController.php index bdee64b7..ea099b71 100644 --- a/app/Http/Home/Controllers/IndexController.php +++ b/app/Http/Home/Controllers/IndexController.php @@ -3,10 +3,26 @@ namespace App\Http\Home\Controllers; use App\Http\Home\Services\Index as IndexService; +use App\Traits\Client as ClientTrait; +use Phalcon\Mvc\Dispatcher; class IndexController extends Controller { + use ClientTrait; + + public function beforeExecuteRoute(Dispatcher $dispatcher) + { + if ($this->isMobileBrowser()) { + + $this->response->redirect('/h5', true); + + return false; + } + + return parent::beforeExecuteRoute($dispatcher); + } + /** * @Get("/", name="home.index") */ diff --git a/app/Http/Home/Controllers/OrderController.php b/app/Http/Home/Controllers/OrderController.php index 591c8187..2fe33eff 100644 --- a/app/Http/Home/Controllers/OrderController.php +++ b/app/Http/Home/Controllers/OrderController.php @@ -48,8 +48,8 @@ class OrderController extends Controller */ public function confirmAction() { - $itemId = $this->request->getQuery('item_id', 'int'); - $itemType = $this->request->getQuery('item_type', 'int'); + $itemId = $this->request->getQuery('item_id', 'string'); + $itemType = $this->request->getQuery('item_type', 'string'); $service = new OrderConfirmService(); diff --git a/app/Http/Home/Controllers/RefundController.php b/app/Http/Home/Controllers/RefundController.php index 327cc361..b55bd061 100644 --- a/app/Http/Home/Controllers/RefundController.php +++ b/app/Http/Home/Controllers/RefundController.php @@ -44,8 +44,10 @@ class RefundController extends Controller $service->handle(); + $location = $this->url->get(['for' => 'home.my.refunds']); + $content = [ - 'location' => $this->url->get(['for' => 'home.my.refunds']), + 'location' => $location, 'msg' => '申请退款成功', ]; @@ -78,8 +80,10 @@ class RefundController extends Controller $service->handle($sn); + $location = $this->url->get(['for' => 'home.my.refunds']); + $content = [ - 'location' => $this->url->get(['for' => 'home.my.refunds']), + 'location' => $location, 'msg' => '取消退款成功', ]; diff --git a/app/Http/Home/Controllers/ReviewController.php b/app/Http/Home/Controllers/ReviewController.php index 48b09a67..e353bf9d 100644 --- a/app/Http/Home/Controllers/ReviewController.php +++ b/app/Http/Home/Controllers/ReviewController.php @@ -99,9 +99,7 @@ class ReviewController extends Controller $service->handle($id); - $content = ['msg' => '删除评价成功']; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => '删除评价成功']); } /** @@ -115,9 +113,7 @@ class ReviewController extends Controller $msg = $like->deleted == 0 ? '点赞成功' : '取消点赞成功'; - $content = ['msg' => $msg]; - - return $this->jsonSuccess($content); + return $this->jsonSuccess(['msg' => $msg]); } } diff --git a/app/Http/Home/Controllers/SearchController.php b/app/Http/Home/Controllers/SearchController.php index 66c249fa..e722a23e 100644 --- a/app/Http/Home/Controllers/SearchController.php +++ b/app/Http/Home/Controllers/SearchController.php @@ -5,7 +5,6 @@ namespace App\Http\Home\Controllers; use App\Services\Logic\Search\Course as CourseSearchService; use App\Services\Logic\Search\Group as GroupSearchService; use App\Services\Logic\Search\User as UserSearchService; -use App\Traits\Response as ResponseTrait; /** * @RoutePrefix("/search") @@ -13,8 +12,6 @@ use App\Traits\Response as ResponseTrait; class SearchController extends Controller { - use ResponseTrait; - /** * @Get("/", name="home.search.index") */ @@ -42,14 +39,6 @@ class SearchController extends Controller $this->view->setVar('pager', $pager); } - /** - * @Get("/form", name="home.search.form") - */ - public function formAction() - { - - } - /** * @param string $type * @return CourseSearchService|GroupSearchService|UserSearchService diff --git a/app/Http/Home/Controllers/UploadController.php b/app/Http/Home/Controllers/UploadController.php index 73da70f8..e7877cf0 100644 --- a/app/Http/Home/Controllers/UploadController.php +++ b/app/Http/Home/Controllers/UploadController.php @@ -20,16 +20,16 @@ class UploadController extends Controller $file = $service->uploadAvatarImage(); - if ($file) { - return $this->jsonSuccess([ - 'data' => [ - 'src' => $service->getImageUrl($file->path), - 'title' => $file->name, - ] - ]); - } else { + if (!$file) { return $this->jsonError(['msg' => '上传文件失败']); } + + $data = [ + 'src' => $service->getImageUrl($file->path), + 'title' => $file->name, + ]; + + return $this->jsonSuccess(['data' => $data]); } /** diff --git a/app/Http/Home/Controllers/VerifyController.php b/app/Http/Home/Controllers/VerifyController.php index d89245bb..1e1666a5 100644 --- a/app/Http/Home/Controllers/VerifyController.php +++ b/app/Http/Home/Controllers/VerifyController.php @@ -4,7 +4,6 @@ namespace App\Http\Home\Controllers; use App\Services\Logic\Verify\EmailCode as EmailCodeService; use App\Services\Logic\Verify\SmsCode as SmsCodeService; -use App\Services\Logic\Verify\VerifyCode as VerifyCodeService; use App\Traits\Response as ResponseTrait; /** @@ -15,18 +14,6 @@ class VerifyController extends \Phalcon\Mvc\Controller use ResponseTrait; - /** - * @Post("/code", name="verify.code") - */ - public function verifyCodeAction() - { - $service = new VerifyCodeService(); - - $service->handle(); - - return $this->jsonSuccess(); - } - /** * @Post("/sms/code", name="verify.sms_code") */ diff --git a/app/Http/Home/Services/Account.php b/app/Http/Home/Services/Account.php index 4858213d..38efb3b2 100644 --- a/app/Http/Home/Services/Account.php +++ b/app/Http/Home/Services/Account.php @@ -3,7 +3,7 @@ namespace App\Http\Home\Services; use App\Repos\User as UserRepo; -use App\Services\Auth as AuthService; +use App\Services\Auth\Home as AuthService; use App\Services\Logic\Account\Register as RegisterService; use App\Validators\Account as AccountValidator; use App\Validators\Captcha as CaptchaValidator; @@ -40,13 +40,13 @@ class Account extends Service { $post = $this->request->getPost(); - $accountValidator = new AccountValidator(); + $validator = new AccountValidator(); - $user = $accountValidator->checkUserLogin($post['account'], $post['password']); + $user = $validator->checkUserLogin($post['account'], $post['password']); - $captchaValidator = new CaptchaValidator(); + $validator = new CaptchaValidator(); - $captchaValidator->checkCode($post['ticket'], $post['rand']); + $validator->checkCode($post['ticket'], $post['rand']); $this->auth->saveAuthInfo($user); } @@ -55,9 +55,9 @@ class Account extends Service { $post = $this->request->getPost(); - $accountValidator = new AccountValidator(); + $validator = new AccountValidator(); - $user = $accountValidator->checkVerifyLogin($post['account'], $post['verify_code']); + $user = $validator->checkVerifyLogin($post['account'], $post['verify_code']); $this->auth->saveAuthInfo($user); } diff --git a/app/Http/Home/Views/course/show_catalog.volt b/app/Http/Home/Views/course/show_catalog.volt index cf542f8f..60500c47 100644 --- a/app/Http/Home/Views/course/show_catalog.volt +++ b/app/Http/Home/Views/course/show_catalog.volt @@ -36,7 +36,7 @@ {% set priv = lesson.me.owned ? 'allow' : 'deny' %} - {{ lesson.title|e }} + {{ lesson.title }} {% if lesson.free == 1 %} 免费 {% endif %} diff --git a/app/Http/Home/Views/macros/course.volt b/app/Http/Home/Views/macros/course.volt index e6f7dfa9..82f6d237 100644 --- a/app/Http/Home/Views/macros/course.volt +++ b/app/Http/Home/Views/macros/course.volt @@ -32,12 +32,12 @@
{% if course.market_price > course.vip_price %} @@ -69,11 +69,11 @@ {% set course_url = url({'for':'home.course.show','id':course.id}) %}