EnvDao.class.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  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 EnvDao
  19. {
  20. /**
  21. * 获取环境列表
  22. * @param $projectID int 项目ID
  23. * @return bool
  24. */
  25. public function getEnvList(&$projectID)
  26. {
  27. $db = getDatabase();
  28. $envList = $db->prepareExecuteAll("SELECT eo_api_env.envID,eo_api_env.envName FROM eo_api_env WHERE eo_api_env.projectID = ? ORDER BY eo_api_env.envID DESC;", array($projectID));
  29. if (is_array($envList)) {
  30. foreach ($envList as &$env) {
  31. $env['frontURIList'] = $db->prepareExecuteAll("SELECT eo_api_env_front_uri.applyProtocol,eo_api_env_front_uri.uri,eo_api_env_front_uri.uriID FROM eo_api_env_front_uri WHERE eo_api_env_front_uri.envID = ?;", array($env['envID']));
  32. $env['headerList'] = $db->prepareExecuteAll("SELECT eo_api_env_header.applyProtocol,eo_api_env_header.headerName,eo_api_env_header.headerValue,eo_api_env_header.headerID FROM eo_api_env_header WHERE eo_api_env_header.envID = ?;", array($env['envID']));
  33. $env['paramList'] = $db->prepareExecuteAll("SELECT eo_api_env_param.paramKey,eo_api_env_param.paramValue,eo_api_env_param.paramID FROM eo_api_env_param WHERE eo_api_env_param.envID = ?;", array($env['envID']));
  34. $env['additionalParamList'] = $db->prepareExecuteAll('SELECT eo_api_env_param_additional.paramKey,eo_api_env_param_additional.paramValue,eo_api_env_param_additional.paramID FROM eo_api_env_param_additional WHERE eo_api_env_param_additional.envID = ?;', array($env['envID']));
  35. }
  36. }
  37. if (empty($envList))
  38. return FALSE;
  39. else
  40. return $envList;
  41. }
  42. /**
  43. * 添加环境
  44. * @param int $projectID 项目ID
  45. * @param string $envName 环境名称
  46. * @param string $front_uri 前置URI
  47. * @param array $headers 请求头部
  48. * @param array $params 全局变量
  49. * @param int $apply_protocol 应用的请求类型,[-1]=>[所有请求类型]
  50. * @param array $additional_params 额外参数
  51. * @return bool|int
  52. */
  53. public function addEnv(&$projectID, &$envName, &$front_uri, &$headers, &$params, $apply_protocol, &$additional_params)
  54. {
  55. $db = getDatabase();
  56. try {
  57. $db->beginTransaction();
  58. //新建环境
  59. $db->prepareExecute("INSERT INTO eo_api_env (eo_api_env.envName,eo_api_env.projectID) VALUES (?,?);", array(
  60. $envName,
  61. $projectID
  62. ));
  63. $env_id = $db->getLastInsertID();
  64. if (empty($env_id))
  65. throw new \PDOException('addEnv Error');
  66. if ($front_uri) {
  67. //新建前置URI
  68. $db->prepareExecute("INSERT INTO eo_api_env_front_uri (eo_api_env_front_uri.envID,eo_api_env_front_uri.applyProtocol,eo_api_env_front_uri.uri) VALUES (?,?,?);", array(
  69. $env_id,
  70. $apply_protocol,
  71. $front_uri
  72. ));
  73. if ($db->getAffectRow() < 1)
  74. throw new \PDOException('addFrontURI Error');
  75. }
  76. if (!empty($headers)) {
  77. foreach ($headers as $k => $v) {
  78. //新建请求头部
  79. $db->prepareExecute("INSERT INTO eo_api_env_header (eo_api_env_header.envID,eo_api_env_header.applyProtocol,eo_api_env_header.headerName,eo_api_env_header.headerValue) VALUES (?,?,?,?);", array(
  80. $env_id,
  81. $apply_protocol,
  82. $k,
  83. $v
  84. ));
  85. if ($db->getAffectRow() < 1)
  86. throw new \PDOException('addHeader Error');
  87. }
  88. }
  89. if (!empty($params)) {
  90. foreach ($params as $k => $v) {
  91. //新建全局变量
  92. $db->prepareExecute("INSERT INTO eo_api_env_param (eo_api_env_param.envID,eo_api_env_param.paramKey,eo_api_env_param.paramValue) VALUES (?,?,?);", array(
  93. $env_id,
  94. $k,
  95. $v
  96. ));
  97. if ($db->getAffectRow() < 1)
  98. throw new \PDOException('addParam Error');
  99. }
  100. }
  101. if (!empty($additional_params)) {
  102. foreach ($additional_params as $k => $v) {
  103. //新建额外参数
  104. $db->prepareExecute("INSERT INTO eo_api_env_param_additional(eo_api_env_param_additional.envID,eo_api_env_param_additional.paramKey,eo_api_env_param_additional.paramValue) VALUES (?,?,?);", array(
  105. $env_id,
  106. $k,
  107. $v
  108. ));
  109. if ($db->getAffectRow() < 1)
  110. throw new \PDOException('addAdditionalParam Error');
  111. }
  112. }
  113. $db->commit();
  114. $db->close();
  115. return $env_id;
  116. } catch (\PDOException $e) {
  117. $db->rollback();
  118. return FALSE;
  119. }
  120. }
  121. /**
  122. * 删除环境
  123. * @param $projectID int 项目ID
  124. * @param $env_id int 环境ID
  125. * @return bool
  126. */
  127. public function deleteEnv(&$projectID, &$env_id)
  128. {
  129. $db = getDatabase();
  130. $db->beginTransaction();
  131. $result = $db->prepareExecute('SELECT * FROM eo_api_env_front_uri WHERE eo_api_env_front_uri.envID = ?;', array(
  132. $env_id
  133. ));
  134. if (!empty($result)) {
  135. //删除旧的前置URI
  136. $db->prepareExecute("DELETE FROM eo_api_env_front_uri WHERE eo_api_env_front_uri.envID = ?;", array(
  137. $env_id
  138. ));
  139. if ($db->getAffectRow() < 1) {
  140. $db->rollback();
  141. return FALSE;
  142. }
  143. }
  144. $result = $db->prepareExecute('SELECT * FROM eo_api_env_header WHERE eo_api_env_header.envID = ?;', array(
  145. $env_id
  146. ));
  147. if (!empty($result)) {
  148. //删除旧的请求头部
  149. $db->prepareExecute("DELETE FROM eo_api_env_header WHERE eo_api_env_header.envID = ?;", array(
  150. $env_id
  151. ));
  152. if ($db->getAffectRow() < 1) {
  153. $db->rollback();
  154. return FALSE;
  155. }
  156. }
  157. $result = $db->prepareExecute('SELECT * FROM eo_api_env_param WHERE eo_api_env_param.envID = ?;', array(
  158. $env_id
  159. ));
  160. if (!empty($result)) {
  161. //删除旧的全局变量
  162. $db->prepareExecute("DELETE FROM eo_api_env_param WHERE eo_api_env_param.envID = ?;", array(
  163. $env_id
  164. ));
  165. if ($db->getAffectRow() < 1) {
  166. $db->rollback();
  167. return FALSE;
  168. }
  169. }
  170. $result = $db->prepareExecute('SELECT * FROM eo_api_env_param_additional WHERE eo_api_env_param_additional.envID = ?;', array(
  171. $env_id
  172. ));
  173. if (!empty($result)) {
  174. //删除额外参数
  175. $db->prepareExecuteAll('DELETE FROM eo_api_env_param_additional WHERE eo_api_env_param_additional.envID = ?;', array(
  176. $env_id
  177. ));
  178. if ($db->getAffectRow() < 1) {
  179. $db->rollback();
  180. return FALSE;
  181. }
  182. }
  183. //删除环境
  184. $db->prepareExecute("DELETE FROM eo_api_env WHERE eo_api_env.envID = ? AND eo_api_env.projectID = ?;", array(
  185. $env_id,
  186. $projectID
  187. ));
  188. if ($db->getAffectRow() > 0) {
  189. $db->commit();
  190. return TRUE;
  191. } else {
  192. $db->rollback();
  193. return FALSE;
  194. }
  195. }
  196. /**
  197. * 修改环境
  198. * @param $env_id int 环境ID
  199. * @param $envName string 环境名称
  200. * @param $front_uri string 前置uri
  201. * @param $headers array 请求头部
  202. * @param $params array 全局变量
  203. * @param $apply_protocol int 请求协议
  204. * @param $additional_params array 额外参数
  205. * @return bool
  206. */
  207. public function editEnv(&$env_id, &$envName, &$front_uri, &$headers, &$params, $apply_protocol, &$additional_params)
  208. {
  209. $db = getDatabase();
  210. try {
  211. $db->beginTransaction();
  212. $db->prepareExecute("UPDATE eo_api_env SET eo_api_env.envName = ? WHERE eo_api_env.envID = ?;", array(
  213. $envName,
  214. $env_id
  215. ));
  216. //删除旧的前置URI
  217. $db->prepareExecute("DELETE FROM eo_api_env_front_uri WHERE eo_api_env_front_uri.envID = ?;", array(
  218. $env_id
  219. ));
  220. //删除旧的请求头部
  221. $db->prepareExecute("DELETE FROM eo_api_env_header WHERE eo_api_env_header.envID = ?;", array(
  222. $env_id
  223. ));
  224. //删除旧的全局变量
  225. $db->prepareExecute("DELETE FROM eo_api_env_param WHERE eo_api_env_param.envID = ?;", array(
  226. $env_id
  227. ));
  228. //删除旧的额外参数
  229. $db->prepareExecuteAll('DELETE FROM eo_api_env_param_additional WHERE eo_api_env_param_additional.envID = ?;', array(
  230. $env_id
  231. ));
  232. if ($front_uri) {
  233. // 新建前置URI
  234. $db->prepareExecute("INSERT INTO eo_api_env_front_uri (eo_api_env_front_uri.envID,eo_api_env_front_uri.applyProtocol,eo_api_env_front_uri.uri) VALUES (?,?,?);", array(
  235. $env_id,
  236. $apply_protocol,
  237. $front_uri
  238. ));
  239. if ($db->getAffectRow() < 1)
  240. throw new \PDOException('addFrontURI Error');
  241. }
  242. if (!empty($headers)) {
  243. foreach ($headers as $k => $v) {
  244. // 新建请求头部
  245. $db->prepareExecute("INSERT INTO eo_api_env_header (eo_api_env_header.envID,eo_api_env_header.applyProtocol,eo_api_env_header.headerName,eo_api_env_header.headerValue) VALUES (?,?,?,?);", array(
  246. $env_id,
  247. $apply_protocol,
  248. $k,
  249. $v
  250. ));
  251. if ($db->getAffectRow() < 1)
  252. throw new \PDOException('addHeader Error');
  253. }
  254. }
  255. if (!empty($params)) {
  256. foreach ($params as $k => $v) {
  257. // 新建全局变量
  258. $db->prepareExecute("INSERT INTO eo_api_env_param (eo_api_env_param.envID,eo_api_env_param.paramKey,eo_api_env_param.paramValue) VALUES (?,?,?);", array(
  259. $env_id,
  260. $k,
  261. $v
  262. ));
  263. if ($db->getAffectRow() < 1)
  264. throw new \PDOException('addParam Error');
  265. }
  266. }
  267. if (!empty($additional_params)) {
  268. foreach ($additional_params as $k => $v) {
  269. //新建额外参数
  270. $db->prepareExecute("INSERT INTO eo_api_env_param_additional(eo_api_env_param_additional.envID,eo_api_env_param_additional.paramKey,eo_api_env_param_additional.paramValue) VALUES (?,?,?);", array(
  271. $env_id,
  272. $k,
  273. $v
  274. ));
  275. if ($db->getAffectRow() < 1)
  276. throw new \PDOException('addAdditionalParam Error');
  277. }
  278. }
  279. $db->commit();
  280. return TRUE;
  281. } catch (\PDOException $e) {
  282. $db->rollback();
  283. return FALSE;
  284. }
  285. }
  286. /**
  287. * 获取环境信息
  288. * @param int $env_id 环境ID
  289. * @return bool|array
  290. */
  291. public function getEnvInfoFromDB(&$env_id)
  292. {
  293. $db = getDatabase();
  294. $env = $db->prepareExecute("SELECT eo_api_env.envID,eo_api_env.envName FROM eo_api_env WHERE eo_api_env.envID = ?;", array($env_id));
  295. $env['frontURIList'] = $db->prepareExecute("SELECT eo_api_env_front_uri.applyProtocol,eo_api_env_front_uri.uri FROM eo_api_env_front_uri WHERE eo_api_env_front_uri.envID = ?;", array($env_id));
  296. $env['headerList'] = $db->prepareExecuteAll("SELECT eo_api_env_header.applyProtocol,eo_api_env_header.headerName,eo_api_env_header.headerValue FROM eo_api_env_header WHERE eo_api_env_header.envID = ?;", array($env_id));
  297. $env['paramList'] = $db->prepareExecuteAll("SELECT eo_api_env_param.paramKey,eo_api_env_param.paramValue FROM eo_api_env_param WHERE eo_api_env_param.envID = ?;", array($env_id));
  298. $env['additionalParamList'] = $db->prepareExecuteAll('SELECT eo_api_env_param_additional.paramKey,eo_api_env_param_additional.paramValue FROM eo_api_env_param_additional WHERE eo_api_env_param_additional.envID = ?;', array($env_id));
  299. if ($env)
  300. return $env;
  301. else
  302. return FALSE;
  303. }
  304. /**
  305. * 获取环境名称
  306. * @param $envID int 环境ID
  307. * @return bool
  308. */
  309. public function getEnvName(&$envID)
  310. {
  311. $db = getDatabase();
  312. $result = $db->prepareExecute("SELECT eo_api_env.envName FROM eo_api_env WHERE eo_api_env.envID = ?;", array($envID));
  313. if (empty($result))
  314. return FALSE;
  315. else
  316. return $result['envName'];
  317. }
  318. /**
  319. * 检查项目环境权限
  320. * @param $envID int 环境ID
  321. * @param $userID int 用户ID
  322. * @return bool
  323. */
  324. public function checkEnvPermission(&$envID, &$userID)
  325. {
  326. $db = getDatabase();
  327. $result = $db->prepareExecute('SELECT eo_conn_project.projectID FROM eo_api_env LEFT JOIN eo_conn_project ON eo_api_env.projectID = eo_conn_project.projectID WHERE eo_api_env.envID = ? AND eo_conn_project.userID = ?;', array(
  328. $envID,
  329. $userID
  330. ));
  331. if (empty($result)) {
  332. return FALSE;
  333. } else {
  334. return $result['projectID'];
  335. }
  336. }
  337. }