| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- <?php
- namespace addons\Course\backend\controllers;
- use addons\Course\common\models\AddonsCourseChapter;
- use addons\Course\common\models\AddonsCourseDirectorys;
- use common\enums\StatusEnum;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\Course\backend\controllers
- */
- class DirectoryController extends BaseController
- {
- public function actionList()
- {
- if (!\Yii::$app->request->isGet) {
- return $this->error('请求方式错误');
- }
- $mall_id = $this->mall_id;
- $course_id = \Yii::$app->request->get('course_id');
- // 列表形式,1:普通列表,2:树形列表
- $list_type = \Yii::$app->request->get('list_type', 1);
- if (empty($course_id) || empty($list_type)) {
- return $this->error('参数错误');
- }
- if (1 == $list_type) {
- $list = AddonsCourseDirectorys::getList($mall_id, $course_id, 'id,name,course_id,parent_id,sort');
- } elseif (2 == $list_type) {
- $list = AddonsCourseDirectorys::getDirTreeList($mall_id, $course_id, 'id,name,course_id,parent_id,sort');
- if (!empty($list)) {
- foreach ($list['tree'] as $lk => $lv) {
- $list['tree'][$lk]['label'] = $lv['name'];
- unset($list['tree'][$lk]['name']);
- if (!empty($lv['sub_dir'])) {
- foreach ($lv['sub_dir'] as $sk => $sv) {
- $list['tree'][$lk]['children'][] = $sv;
- $list['tree'][$lk]['children'][$sk]['label'] = $sv['name'];
- unset($list['tree'][$lk]['sub_dir'], $list['tree'][$lk]['children'][$sk]['name']);
- }
- }
- }
- }
- }
- return $this->success('success', $list);
- }
- /**
- * @name:
- * @msg: 添加目录
- * @param {int} course_id 课程 id
- * @param {int} parent_id 父级目录 id
- * @param {string} name 目录名称
- * @return {*}
- */
- public function actionAddDir()
- {
- if (!\Yii::$app->request->isPost) {
- return $this->error('请求方式错误');
- }
- $post = \Yii::$app->request->post();
- if (empty($post['dir_type']) || !in_array($post['dir_type'], [1, 2])) {
- return $this->error('参数错误');
- }
- if (1 == $post['dir_type']) {
- // 添加一级目录
- $rules = [
- [['course_id', 'name'], 'required'],
- ['course_id', 'integer'],
- ['name', 'string', 'max' => 50],
- ];
- } else {
- // 添加子级目录
- $rules = [
- [['course_id', 'name', 'parent_id'], 'required'],
- [['course_id', 'parent_id'], 'integer'],
- ['name', 'string', 'max' => 50],
- ['level', 'safe'],
- ];
- $post['level'] = 2;
- }
- $res = \Yii::$app->services->validate->validate($post, $rules);
- if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- if (empty($post['parent_id'])) {
- $parent_dir_id = 0;
- $level = 1;
- } else {
- $parent_dir_id = $post['parent_id'];
- $level = 2;
- }
- $post['sort'] = AddonsCourseDirectorys::getLastSort($this->mall_id, $post['course_id'], $parent_dir_id ?? 0, $level);
- // dd($post, $post['sort'], $parent_dir_id);
- $res = AddonsCourseDirectorys::setData($this->mall_id, $post, 'addSubDir');
- if (false === $res) {
- return $this->error(AddonsCourseDirectorys::getStaticError());
- }
- return $this->success('添加成功');
- }
- /**
- * @name:
- * @msg: 目录改名称
- * @param {*}
- * @return {*}
- */
- public function actionRename()
- {
- if (!\Yii::$app->request->isPost) {
- return $this->error('请求方式错误');
- }
- $id = \Yii::$app->request->post('id');
- $name = \Yii::$app->request->post('name');
- $course_id = \Yii::$app->request->post('course_id');
- if (empty($id) || empty($name) || empty($course_id)) {
- return $this->error('参数错误');
- }
- $dir_names = AddonsCourseDirectorys::find()
- ->select('name')
- ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'course_id' => $course_id])
- ->asArray()
- ->column();
- if (in_array($name, $dir_names)) {
- return $this->error('目录名称已经存在');
- }
- $params = [
- 'id' => $id,
- 'name' => $name,
- ];
- $res = AddonsCourseDirectorys::setData($this->mall_id, $params, 'rename');
- if (false === $res) {
- return $this->error(AddonsCourseDirectorys::getStaticError());
- }
- return $this->success('添加成功');
- }
- /**
- * @name:
- * @msg: 目录改变排序,只能相邻两个互换排序,不能拖动跳过多个进行排序
- * @param {int} id 目录 id
- * @param {int} type 操作类型,1:上移,2:下移
- * @return {*}
- */
- public function actionSortDir()
- {
- if (!\Yii::$app->request->isGet) {
- return $this->error('请求方式错误');
- }
- $id = \Yii::$app->request->get('id');
- $type = \Yii::$app->request->get('type', 1);
- if (empty($id) || (empty($type) && !in_array($type, [1, 2]))) {
- return $this->error('参数错误');
- }
- $res = AddonsCourseDirectorys::switchDirSort($id, $this->mall_id, $type);
- if (false === $res) {
- return $this->error('更改排序失败:' . AddonsCourseDirectorys::getStaticError());
- } else {
- return $this->success('更改排序成功');
- }
- }
- /**
- * @name:
- * @msg: 删除目录,目录下有章节时不能删除,目录下有子级目录时不能删除
- * @param {int} id 目录 id
- * @return {*}
- */
- public function actionDelete()
- {
- if (!\Yii::$app->request->isPost) {
- return $this->error('请求方式错误');
- }
- $id = \Yii::$app->request->post('id');
- if (empty($id)) {
- return $this->error('参数错误');
- }
- $dirs = AddonsCourseDirectorys::findOne(['mall_id' => $this->mall_id, 'parent_id' => $id, 'status' => StatusEnum::ENABLED]);
- if (!empty($dirs)) {
- return $this->error('该目录下尚有子级目录,不能删除');
- }
- $chapter = AddonsCourseChapter::findOne(['mall_id' => $this->mall_id, 'dir_id' => $id, 'status' => StatusEnum::ENABLED]);
- if (!empty($chapter)) {
- return $this->error('该目录下尚有课程章节,不能删除');
- }
- $res = AddonsCourseDirectorys::findOne(['mall_id' => $this->mall_id, 'id' => $id, 'status' => StatusEnum::ENABLED])->delete();
- if ($res) {
- return $this->success('删除成功');
- } else {
- return $this->error('删除失败');
- }
- }
- /**
- * @name:
- * @msg: 移动一个或者多个章节到一个目录里,不能跨课程移动!!!!!!
- * @param {integer} $course_id 课程 id
- * @param {integer|array} $chapter_ids 一个或者多个章节 id
- * @param {integer} $target_dir_id 目标目录 id,只能是一个
- * @return {*}
- */
- public function actionMoveChapters()
- {
- if (!\Yii::$app->request->isPost || !\Yii::$app->request->isAjax) {
- return $this->error('请求方式错误');
- }
- $course_id = \Yii::$app->request->post('course_id');
- // 章节id,一个或者多个,如果是多个放数组内
- $chapter_ids = \Yii::$app->request->post('chapter_id');
- // 目标目录 id,只能是移动到一个目录里
- $target_dir_id = \Yii::$app->request->post('target_dir_id');
- if (empty($course_id) || empty($chapter_ids) || (empty($target_dir_id) && $target_dir_id != 0)) {
- return $this->error('参数错误');
- }
- $res = AddonsCourseChapter::updateAll(['dir_id' => $target_dir_id], ['mall_id' => $this->mall_id, 'course_id' => $course_id, 'id' => $chapter_ids]);
- if (false !== $res) {
- return $this->success('移动成功');
- } else {
- return $this->error('移动失败');
- }
- }
- }
|