InfoController.class.php
5.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
/**
* Created by PhpStorm.
* User: liyifei2012it
* Date: 18/4/27
* Time: 15:04
*/
namespace Api\Controller\Path;
use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\MapHelper;
use Common\Common\StudyMap;
use Common\Service\MapService;
use Common\Service\MapPathService;
use Common\Service\PathContentService;
use Common\Service\PathService;
use Common\Service\RightService;
use Common\Service\UserPathContentService;
class InfoController extends \Api\Controller\AbstractController
{
/**
* Info
* @author liyifei
* @desc 学习路径详情接口
* @param Int map_id:true 地图ID
* @param Int path_id:true 路径ID
* @return mixed
array(
'map_url' => '', // 模板详细图片Url
'path_name' => 'xxx', // 路径名称
'is_step' => 1, // 是否开启闯关(1=未开启;2=已开启)
'description' => '', // 介绍
'path_num' => 3, // 当前路径数
'study_content_total' => 5, // 已完成内容数
'content_total' => 10, // 内容总数
'list' => array( // 列表数据
array(
'path_id' => 1, // 学习路径ID
'path_content_id' => 1, // 学习内容ID
'app' => 'course', // 应用
'app_data_id' => 1, // 应用数据ID
'title' => '新员工岗位学习', // 内容标题
'is_learn' => 1, // 是否必学(1=否;2=是)
'complete_status' => 1, // 完成状态(1=未完成;2=已完成)
'order' => 1, // 排序,
'url' => '', // 内容跳转url
),
),
)
*/
public function Index_post()
{
$rules = [
'map_id' => 'require|integer|gt:0',
'path_id' => 'require|integer|gt:0',
];
// 参数校验
$validate = new PackageValidate($rules, [], array_keys($rules));
$postData = $validate->postData;
$map_id = $postData['map_id'];
$path_id = $postData['path_id'];
// 地图是否存在、已发布
$mapServ = new MapService();
$map = $mapServ->get($map_id);
if (empty($map)) {
E('_ERR_MAP_NOT_FOUND');
}
if ($map['map_status'] == Constant::MAP_IS_STATUS_END) {
E('_ERR_MAP_STATUS_IS_END');
}
// 登录人员是否有权查看地图
$rightServ = new RightService();
$isRight = $rightServ->checkUserRight($this->_login->user, $map_id);
if (!$isRight) {
E('_ERR_MAP_ACCESS_DENIED');
}
// 路径是否被该地图关联
$mapPathServ = new MapPathService();
$mapPath = $mapPathServ->get_by_conds(['map_id' => $map_id, 'path_id' => $path_id]);
if (empty($mapPath)) {
E('_ERR_PATH_NOT_CONNECT_MAP');
}
// 学习路径详情
$pathServ = new PathService();
$path = $pathServ->get($path_id);
if (empty($path)) {
E('_ERR_PATH_NOT_FOUND');
}
// 学习路径关联学习内容
$contentServ = new PathContentService();
$contents = $contentServ->list_by_conds(['path_id' => $path_id], null, ['`order`' => 'ASC']);
// 用户已完成内容列表
$userContentServ = new UserPathContentService();
$conds = [
'uid' => $this->uid,
'map_id' => $map_id,
'path_id' => $path_id,
'complete_status' => Constant::COMPLETE_STATUS_IS_TRUE,
];
$userContents = $userContentServ->list_by_conds($conds);
// 根据应用,格式化已完成内容列表
$studyMap = new StudyMap($map_id);
$formatContent = $studyMap->formatPathContent($userContents);
// 组合学习内容列表
$study_content_total = 0;
foreach ($contents as $k => $content) {
$app = $content['app'];
$app_data_id = $content['app_data_id'];
$studyContents = isset($formatContent[$app]) ? $formatContent[$app] : [];
// 已完成
if (isset($studyContents[$app_data_id])) {
$study_content_total++;
$contents[$k]['complete_status'] = Constant::COMPLETE_STATUS_IS_TRUE;
// 未完成
} else {
$contents[$k]['complete_status'] = Constant::COMPLETE_STATUS_IS_FALSE;
}
// 跳转至相关应用的url
$params = [
'map_id' => $map_id,
'path_id' => $path_id,
'app_data_id' => $content['app_data_id'],
];
$contents[$k]['url'] = oaUrl('Frontend/Index/StudyMap/Index', $params, '', ucwords($content['app']));
}
// 获取模板信息
$mapHelper = &MapHelper::instance();
$template = $mapHelper->getTemplate($map['template_id']);
$this->_result = [
'map_url' => $template['map_url'],
'path_name' => $path['path_name'],
// 排序规则从0开始
'path_num' => $mapPath['order'] + 1,
'study_content_total' => $study_content_total,
'content_total' => count($contents),
'is_step' => $path['is_step'],
'description' => $path['description'],
'list' => $contents,
];
}
}