GroupDao.class.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. <?php
  2. /**
  3. * @name eolinker ams open source,eolinker开源版本
  4. * @link https://www.eolinker.com/
  5. * @package eolinker
  6. * @author www.eolinker.com 广州银云信息科技有限公司 ©2015-2018
  7. * eoLinker是目前全球领先、国内最大的在线API接口管理平台,提供自动生成API文档、API自动化测试、Mock测试、团队协作等功能,旨在解决由于前后端分离导致的开发效率低下问题。
  8. * 如在使用的过程中有任何问题,欢迎加入用户讨论群进行反馈,我们将会以最快的速度,最好的服务态度为您解决问题。
  9. *
  10. * eoLinker AMS开源版的开源协议遵循Apache License 2.0,如需获取最新的eolinker开源版以及相关资讯,请访问:https://www.eolinker.com/#/os/download
  11. *
  12. * 官方网站:https://www.eolinker.com/
  13. * 官方博客以及社区:http://blog.eolinker.com/
  14. * 使用教程以及帮助:http://help.eolinker.com/
  15. * 商务合作邮箱:market@eolinker.com
  16. * 用户讨论QQ群:284421832
  17. */
  18. class GroupDao
  19. {
  20. /**
  21. * 添加项目api分组
  22. * @param $projectID int 项目ID
  23. * @param $groupName string 分组名称
  24. * @return bool
  25. */
  26. public function addGroup(&$projectID, &$groupName)
  27. {
  28. $db = getDatabase();
  29. $db->prepareExecute('INSERT INTO eo_api_group (eo_api_group.groupName,eo_api_group.projectID) VALUES (?,?);', array(
  30. $groupName,
  31. $projectID
  32. ));
  33. $groupID = $db->getLastInsertID();
  34. if ($db->getAffectRow() < 1)
  35. return FALSE;
  36. else
  37. return $groupID;
  38. }
  39. /**
  40. * 添加子分组
  41. * @param $projectID int 项目ID
  42. * @param $groupName string 分组名称
  43. * @param $parentGroupID int 父分组ID
  44. * @return bool
  45. */
  46. public function addChildGroup(&$projectID, &$groupName, &$parentGroupID)
  47. {
  48. $db = getDatabase();
  49. $db->prepareExecute('INSERT INTO eo_api_group (eo_api_group.groupName,eo_api_group.projectID,eo_api_group.parentGroupID,eo_api_group.isChild) VALUES (?,?,?,1);', array(
  50. $groupName,
  51. $projectID,
  52. $parentGroupID
  53. ));
  54. $groupID = $db->getLastInsertID();
  55. if ($db->getAffectRow() < 1)
  56. return FALSE;
  57. else
  58. return $groupID;
  59. }
  60. /**
  61. * 删除项目api分组
  62. * @param $groupID int 项目ID
  63. * @return bool
  64. */
  65. public function deleteGroup(&$groupID)
  66. {
  67. $db = getDatabase();
  68. $db->prepareExecute('DELETE FROM eo_api_group WHERE (eo_api_group.groupID = ? OR eo_api_group.parentGroupID = ?);', array($groupID, $groupID));
  69. $result = $db->getAffectRow();
  70. $db->prepareExecute('UPDATE eo_api SET eo_api.removed = 1 WHERE eo_api.groupID = ?;', array($groupID));
  71. if ($result > 0)
  72. return TRUE;
  73. else
  74. return FALSE;
  75. }
  76. /**
  77. * 获取项目api分组
  78. * @param $projectID int 项目ID
  79. * @return bool
  80. */
  81. public function getGroupList(&$projectID)
  82. {
  83. $db = getDatabase();
  84. $groupList = $db->prepareExecuteAll('SELECT eo_api_group.groupID,eo_api_group.groupName FROM eo_api_group WHERE projectID = ? AND isChild = 0 ORDER BY eo_api_group.groupID DESC;', array($projectID));
  85. if (is_array($groupList))
  86. foreach ($groupList as &$parentGroup) {
  87. $parentGroup['childGroupList'] = array();
  88. $childGroup = $db->prepareExecuteAll('SELECT eo_api_group.groupID,eo_api_group.groupName,eo_api_group.parentGroupID FROM eo_api_group WHERE projectID = ? AND isChild = 1 AND parentGroupID = ? ORDER BY eo_api_group.groupID DESC;', array(
  89. $projectID,
  90. $parentGroup['groupID']
  91. ));
  92. //判断是否有子分组
  93. if (!empty($childGroup))
  94. $parentGroup['childGroupList'] = $childGroup;
  95. }
  96. if (empty($groupList))
  97. return FALSE;
  98. else
  99. return $groupList;
  100. }
  101. /**
  102. * 修改项目api分组
  103. * @param $groupID int 分组ID
  104. * @param $groupName string 分组名称
  105. * @param $parentGroupID int 父分组ID
  106. * @return bool
  107. */
  108. public function editGroup(&$groupID, &$groupName, &$parentGroupID)
  109. {
  110. $db = getDatabase();
  111. if (!$parentGroupID) {
  112. $db->prepareExecute('UPDATE eo_api_group SET eo_api_group.groupName = ?,eo_api_group.isChild = 0 WHERE eo_api_group.groupID = ?;', array(
  113. $groupName,
  114. $groupID
  115. ));
  116. } else {
  117. $db->prepareExecute('UPDATE eo_api_group SET eo_api_group.groupName = ?,eo_api_group.parentGroupID = ?,eo_api_group.isChild = 1 WHERE eo_api_group.groupID = ?;', array(
  118. $groupName,
  119. $parentGroupID,
  120. $groupID
  121. ));
  122. }
  123. if ($db->getAffectRow() > 0)
  124. return TRUE;
  125. else
  126. return FALSE;
  127. }
  128. /**
  129. * 判断分组和用户是否匹配
  130. * @param $groupID int 分组ID
  131. * @param $userID int 用户ID
  132. * @return bool
  133. */
  134. public function checkGroupPermission(&$groupID, &$userID)
  135. {
  136. $db = getDatabase();
  137. $result = $db->prepareExecute('SELECT eo_conn_project.projectID FROM eo_conn_project INNER JOIN eo_api_group ON eo_api_group.projectID = eo_conn_project.projectID WHERE userID = ? AND groupID = ?;', array(
  138. $userID,
  139. $groupID
  140. ));
  141. if (empty($result))
  142. return FALSE;
  143. else
  144. return $result['projectID'];
  145. }
  146. /**
  147. * 更新分组排序
  148. * @param $projectID int 项目ID
  149. * @param $orderList string 排序列表
  150. * @return bool
  151. */
  152. public function sortGroup(&$projectID, &$orderList)
  153. {
  154. $db = getDatabase();
  155. $db->prepareExecute('REPLACE INTO eo_api_group_order(projectID, orderList) VALUES (?,?);', array(
  156. $projectID,
  157. $orderList
  158. ));
  159. if ($db->getAffectRow() > 0)
  160. return TRUE;
  161. else
  162. return FALSE;
  163. }
  164. /**
  165. * 获取分组排序列表
  166. * @param $projectID int 项目ID
  167. * @return bool
  168. */
  169. public function getGroupOrderList(&$projectID)
  170. {
  171. $db = getDatabase();
  172. $result = $db->prepareExecute('SELECT eo_api_group_order.orderList FROM eo_api_group_order WHERE eo_api_group_order.projectID = ?;', array(
  173. $projectID
  174. ));
  175. if (empty($result)) {
  176. return FALSE;
  177. } else {
  178. return $result['orderList'];
  179. }
  180. }
  181. /**
  182. * 获取分组名称
  183. * @param $group_id
  184. * @return bool
  185. */
  186. public function getGroupName(&$group_id)
  187. {
  188. $db = getDatabase();
  189. $result = $db->prepareExecute('SELECT eo_api_group.groupName FROM eo_api_group WHERE eo_api_group.groupID = ?;', array($group_id));
  190. if (empty($result)) {
  191. return FALSE;
  192. } else {
  193. return $result['groupName'];
  194. }
  195. }
  196. /**
  197. * 获取分组相关数据
  198. * @param $group_id
  199. * @return array|bool
  200. */
  201. public function getGroupData(&$group_id)
  202. {
  203. $db = getDatabase();
  204. $result = array();
  205. $group = $db->prepareExecute('SELECT eo_api_group.groupName,eo_api_group.isChild FROM eo_api_group WHERE eo_api_group.groupID = ?;', array(
  206. $group_id
  207. ));
  208. $api_list = $db->prepareExecuteAll("SELECT eo_api_cache.apiID,eo_api_cache.apiJson,eo_api_cache.starred FROM eo_api_cache INNER JOIN eo_api ON eo_api.apiID = eo_api_cache.apiID WHERE eo_api_cache.groupID = ? AND eo_api.removed = 0;", array(
  209. $group_id
  210. ));
  211. $result['groupName'] = $group['groupName'];
  212. if (is_array($api_list)) {
  213. $j = 0;
  214. foreach ($api_list as $api) {
  215. $result['apiList'][$j] = json_decode($api['apiJson'], TRUE);
  216. $result['apiList'][$j]['baseInfo']['starred'] = $api['starred'];
  217. ++$j;
  218. }
  219. }
  220. if ($group['isChild'] == 0) {
  221. $child_group_list = $db->prepareExecuteAll('SELECT eo_api_group.groupID,eo_api_group.groupName FROM eo_api_group WHERE eo_api_group.parentGroupID = ?', array(
  222. $group_id
  223. ));
  224. if ($child_group_list) {
  225. $i = 0;
  226. foreach ($child_group_list as $group) {
  227. $result['childGroupList'][$i]['groupName'] = $group['groupName'];
  228. $api_list = $db->prepareExecuteAll("SELECT eo_api_cache.apiID,eo_api_cache.apiJson,eo_api_cache.starred FROM eo_api_cache INNER JOIN eo_api ON eo_api.apiID = eo_api_cache.apiID WHERE eo_api_cache.groupID = ? AND eo_api.removed = 0;", array(
  229. $group['groupID']
  230. ));
  231. if (is_array($api_list)) {
  232. $j = 0;
  233. foreach ($api_list as $api) {
  234. $result['childGroupList'][$i]['apiList'][$j] = json_decode($api['apiJson'], TRUE);
  235. $result['childGroupList'][$i]['apiList'][$j]['baseInfo']['starred'] = $api['starred'];
  236. ++$j;
  237. }
  238. }
  239. $i++;
  240. }
  241. }
  242. }
  243. if ($result)
  244. return $result;
  245. else
  246. return FALSE;
  247. }
  248. /**
  249. * 导入接口分组
  250. * @param $project_id
  251. * @param $user_id
  252. * @param $data
  253. * @return bool
  254. */
  255. public function importGroup(&$project_id, &$user_id, &$data)
  256. {
  257. $db = getDatabase();
  258. try {
  259. $db->beginTransaction();
  260. $db->prepareExecute('INSERT INTO eo_api_group (eo_api_group.groupName,eo_api_group.projectID) VALUES (?,?);', array(
  261. $data['groupName'],
  262. $project_id
  263. ));
  264. if ($db->getAffectRow() < 1)
  265. throw new \PDOException("addGroup error");
  266. $group_id = $db->getLastInsertID();
  267. if ($data['apiList']) {
  268. foreach ($data['apiList'] as $api) {
  269. // 插入api基本信息
  270. $db->prepareExecute('INSERT INTO eo_api (eo_api.apiName,eo_api.apiURI,eo_api.apiProtocol,eo_api.apiSuccessMock,eo_api.apiFailureMock,eo_api.apiRequestType,eo_api.apiStatus,eo_api.groupID,eo_api.projectID,eo_api.starred,eo_api.apiNoteType,eo_api.apiNoteRaw,eo_api.apiNote,eo_api.apiRequestParamType,eo_api.apiRequestRaw,eo_api.apiUpdateTime,eo_api.updateUserID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);', array(
  271. $api['baseInfo']['apiName'],
  272. $api['baseInfo']['apiURI'],
  273. $api['baseInfo']['apiProtocol'],
  274. $api['baseInfo']['apiSuccessMock'],
  275. $api['baseInfo']['apiFailureMock'],
  276. $api['baseInfo']['apiRequestType'],
  277. $api['baseInfo']['apiStatus'],
  278. $group_id,
  279. $project_id,
  280. $api['baseInfo']['starred'],
  281. $api['baseInfo']['apiNoteType'],
  282. $api['baseInfo']['apiNoteRaw'],
  283. $api['baseInfo']['apiNote'],
  284. $api['baseInfo']['apiRequestParamType'],
  285. $api['baseInfo']['apiRequestRaw'],
  286. $api['baseInfo']['apiUpdateTime'],
  287. $user_id
  288. ));
  289. if ($db->getAffectRow() < 1)
  290. throw new \PDOException("addApi error");
  291. $api_id = $db->getLastInsertID();
  292. // 插入header信息
  293. foreach ($api['headerInfo'] as $header) {
  294. $db->prepareExecute('INSERT INTO eo_api_header (eo_api_header.headerName,eo_api_header.headerValue,eo_api_header.apiID) VALUES (?,?,?);', array(
  295. $header['headerName'],
  296. $header['headerValue'],
  297. $api_id
  298. ));
  299. if ($db->getAffectRow() < 1)
  300. throw new \PDOException("addHeader error");
  301. }
  302. // 插入api请求值信息
  303. foreach ($api['requestInfo'] as $request) {
  304. $db->prepareExecute('INSERT INTO eo_api_request_param (eo_api_request_param.apiID,eo_api_request_param.paramName,eo_api_request_param.paramKey,eo_api_request_param.paramValue,eo_api_request_param.paramLimit,eo_api_request_param.paramNotNull,eo_api_request_param.paramType) VALUES (?,?,?,?,?,?,?);', array(
  305. $api_id,
  306. $request['paramName'],
  307. $request['paramKey'],
  308. $request['paramValue'],
  309. $request['paramLimit'],
  310. $request['paramNotNull'],
  311. $request['paramType']
  312. ));
  313. if ($db->getAffectRow() < 1)
  314. throw new \PDOException("addRequestParam error");
  315. $param_id = $db->getLastInsertID();
  316. foreach ($request['paramValueList'] as $value) {
  317. $db->prepareExecute('INSERT INTO eo_api_request_value (eo_api_request_value.paramID,eo_api_request_value.`value`,eo_api_request_value.valueDescription) VALUES (?,?,?);', array(
  318. $param_id,
  319. $value['value'],
  320. $value['valueDescription']
  321. ));
  322. if ($db->getAffectRow() < 1)
  323. throw new \PDOException("addApi error");
  324. };
  325. };
  326. // 插入api返回值信息
  327. foreach ($api['resultInfo'] as $result) {
  328. $db->prepareExecute('INSERT INTO eo_api_result_param (eo_api_result_param.apiID,eo_api_result_param.paramName,eo_api_result_param.paramKey,eo_api_result_param.paramNotNull) VALUES (?,?,?,?);', array(
  329. $api_id,
  330. $result['paramName'],
  331. $result['paramKey'],
  332. $result['paramNotNull']
  333. ));
  334. if ($db->getAffectRow() < 1)
  335. throw new \PDOException("addResultParam error");
  336. $param_id = $db->getLastInsertID();
  337. foreach ($result['paramValueList'] as $value) {
  338. $db->prepareExecute('INSERT INTO eo_api_result_value (eo_api_result_value.paramID,eo_api_result_value.`value`,eo_api_result_value.valueDescription) VALUES (?,?,?);;', array(
  339. $param_id,
  340. $value['value'],
  341. $value['valueDescription']
  342. ));
  343. if ($db->getAffectRow() < 1)
  344. throw new \PDOException("addApi error");
  345. };
  346. };
  347. // 插入api缓存数据用于导出
  348. $db->prepareExecute("INSERT INTO eo_api_cache (eo_api_cache.projectID,eo_api_cache.groupID,eo_api_cache.apiID,eo_api_cache.apiJson,eo_api_cache.starred) VALUES (?,?,?,?,?);", array(
  349. $project_id,
  350. $group_id,
  351. $api_id,
  352. json_encode($api),
  353. $api['baseInfo']['starred']
  354. ));
  355. if ($db->getAffectRow() < 1) {
  356. throw new \PDOException("addApiCache error");
  357. }
  358. }
  359. }
  360. // 二级分组代码
  361. if ($data['childGroupList']) {
  362. $group_parent_id = $group_id;
  363. foreach ($data['childGroupList'] as $api_group_child) {
  364. $db->prepareExecute('INSERT INTO eo_api_group (eo_api_group.groupName,eo_api_group.projectID,eo_api_group.parentGroupID, eo_api_group.isChild) VALUES (?,?,?,?);', array(
  365. $api_group_child['groupName'],
  366. $project_id,
  367. $group_parent_id,
  368. 1
  369. ));
  370. if ($db->getAffectRow() < 1)
  371. throw new \PDOException("addChildGroup error");
  372. $group_id = $db->getLastInsertID();
  373. // 如果当前分组没有接口,则跳过到下一分组
  374. if (empty($api_group_child['apiList']))
  375. continue;
  376. foreach ($api_group_child['apiList'] as $api) {
  377. // 插入api基本信息
  378. $db->prepareExecute('INSERT INTO eo_api (eo_api.apiName,eo_api.apiURI,eo_api.apiProtocol,eo_api.apiSuccessMock,eo_api.apiFailureMock,eo_api.apiRequestType,eo_api.apiStatus,eo_api.groupID,eo_api.projectID,eo_api.starred,eo_api.apiNoteType,eo_api.apiNoteRaw,eo_api.apiNote,eo_api.apiRequestParamType,eo_api.apiRequestRaw,eo_api.apiUpdateTime,eo_api.updateUserID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);', array(
  379. $api['baseInfo']['apiName'],
  380. $api['baseInfo']['apiURI'],
  381. $api['baseInfo']['apiProtocol'],
  382. $api['baseInfo']['apiSuccessMock'],
  383. $api['baseInfo']['apiFailureMock'],
  384. $api['baseInfo']['apiRequestType'],
  385. $api['baseInfo']['apiStatus'],
  386. $group_id,
  387. $project_id,
  388. $api['baseInfo']['starred'],
  389. $api['baseInfo']['apiNoteType'],
  390. $api['baseInfo']['apiNoteRaw'],
  391. $api['baseInfo']['apiNote'],
  392. $api['baseInfo']['apiRequestParamType'],
  393. $api['baseInfo']['apiRequestRaw'],
  394. $api['baseInfo']['apiUpdateTime'],
  395. $user_id
  396. ));
  397. if ($db->getAffectRow() < 1)
  398. throw new \PDOException("addChildApi error");
  399. $api_id = $db->getLastInsertID();
  400. // 插入header信息
  401. foreach ($api['headerInfo'] as $header) {
  402. $db->prepareExecute('INSERT INTO eo_api_header (eo_api_header.headerName,eo_api_header.headerValue,eo_api_header.apiID) VALUES (?,?,?);', array(
  403. $header['headerName'],
  404. $header['headerValue'],
  405. $api_id
  406. ));
  407. if ($db->getAffectRow() < 1)
  408. throw new \PDOException("addChildHeader error");
  409. }
  410. // 插入api请求值信息
  411. foreach ($api['requestInfo'] as $request) {
  412. $db->prepareExecute('INSERT INTO eo_api_request_param (eo_api_request_param.apiID,eo_api_request_param.paramName,eo_api_request_param.paramKey,eo_api_request_param.paramValue,eo_api_request_param.paramLimit,eo_api_request_param.paramNotNull,eo_api_request_param.paramType) VALUES (?,?,?,?,?,?,?);', array(
  413. $api_id,
  414. $request['paramName'],
  415. $request['paramKey'],
  416. $request['paramValue'],
  417. $request['paramLimit'],
  418. $request['paramNotNull'],
  419. $request['paramType']
  420. ));
  421. if ($db->getAffectRow() < 1)
  422. throw new \PDOException("addChildRequestParam error");
  423. $param_id = $db->getLastInsertID();
  424. if ($request['paramValueList']) {
  425. foreach ($request['paramValueList'] as $value) {
  426. $db->prepareExecute('INSERT INTO eo_api_request_value (eo_api_request_value.paramID,eo_api_request_value.`value`,eo_api_request_value.valueDescription) VALUES (?,?,?);', array(
  427. $param_id,
  428. $value['value'],
  429. $value['valueDescription']
  430. ));
  431. if ($db->getAffectRow() < 1)
  432. throw new \PDOException("addChildApi error");
  433. };
  434. }
  435. };
  436. // 插入api返回值信息
  437. foreach ($api['resultInfo'] as $result) {
  438. $db->prepareExecute('INSERT INTO eo_api_result_param (eo_api_result_param.apiID,eo_api_result_param.paramName,eo_api_result_param.paramKey,eo_api_result_param.paramNotNull) VALUES (?,?,?,?);', array(
  439. $api_id,
  440. $result['paramName'],
  441. $result['paramKey'],
  442. $result['paramNotNull']
  443. ));
  444. if ($db->getAffectRow() < 1)
  445. throw new \PDOException("addChildResultParam error");
  446. $param_id = $db->getLastInsertID();
  447. if ($result['paramValueList']) {
  448. foreach ($result['paramValueList'] as $value) {
  449. $db->prepareExecute('INSERT INTO eo_api_result_value (eo_api_result_value.paramID,eo_api_result_value.`value`,eo_api_result_value.valueDescription) VALUES (?,?,?);;', array(
  450. $param_id,
  451. $value['value'],
  452. $value['valueDescription']
  453. ));
  454. if ($db->getAffectRow() < 1)
  455. throw new \PDOException("addChildParamValue error");
  456. };
  457. }
  458. };
  459. // 插入api缓存数据用于导出
  460. $db->prepareExecute("INSERT INTO eo_api_cache (eo_api_cache.projectID,eo_api_cache.groupID,eo_api_cache.apiID,eo_api_cache.apiJson,eo_api_cache.starred) VALUES (?,?,?,?,?);", array(
  461. $project_id,
  462. $group_id,
  463. $api_id,
  464. json_encode($api),
  465. $api['baseInfo']['starred']
  466. ));
  467. if ($db->getAffectRow() < 1) {
  468. throw new \PDOException("addChildApiCache error");
  469. }
  470. }
  471. }
  472. }
  473. $db->commit();
  474. return TRUE;
  475. } catch (\Exception $e) {
  476. $db->rollback();
  477. return FALSE;
  478. }
  479. }
  480. }
  481. ?>