UsersController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Model\DBCache;
  5. use App\Module\Base;
  6. use App\Module\Users;
  7. use DB;
  8. use Request;
  9. use Session;
  10. /**
  11. * @apiDefine users
  12. *
  13. * 会员
  14. */
  15. class UsersController extends Controller
  16. {
  17. public function __invoke($method, $action = '')
  18. {
  19. $app = $method ? $method : 'main';
  20. if ($action) {
  21. $app .= "__" . $action;
  22. }
  23. return (method_exists($this, $app)) ? $this->$app() : Base::ajaxError("404 not found (" . str_replace("__", "/", $app) . ").");
  24. }
  25. /**
  26. * 登陆、注册
  27. *
  28. * @apiParam {String} type 类型
  29. * - login:登录(默认)
  30. * - reg:注册
  31. * @apiParam {String} username 用户名
  32. * @apiParam {String} userpass 密码
  33. */
  34. public function login()
  35. {
  36. $type = trim(Request::input('type'));
  37. $username = trim(Request::input('username'));
  38. $userpass = trim(Request::input('userpass'));
  39. if ($type == 'reg') {
  40. $setting = Base::setting('system');
  41. if ($setting['reg'] == 'close') {
  42. return Base::retError('未开放注册。');
  43. }
  44. $user = Users::reg($username, $userpass);
  45. if (Base::isError($user)) {
  46. return $user;
  47. } else {
  48. $user = $user['data'];
  49. }
  50. } else {
  51. $user = Base::DBC2A(DB::table('users')->where('username', $username)->first());
  52. if (empty($user)) {
  53. return Base::retError('账号或密码错误。');
  54. }
  55. if ($user['userpass'] != Base::md52($userpass)) {
  56. return Base::retError('账号或密码错误!');
  57. }
  58. }
  59. //
  60. $array = [
  61. 'token' => Users::token($user),
  62. 'loginnum' => $user['loginnum'] + 1,
  63. 'lastip' => Base::getIp(),
  64. 'lastdate' => Base::time(),
  65. 'lineip' => Base::getIp(),
  66. 'linedate' => Base::time(),
  67. ];
  68. Base::array_over($user, $array);
  69. DB::table('users')->where('id', $user['id'])->update($array);
  70. //
  71. return Base::retSuccess($type == 'reg' ? "注册成功!" : "登陆成功!", Users::retInfo($user));
  72. }
  73. /**
  74. * 获取我的信息
  75. *
  76. * @apiParam {String} [callback] jsonp返回字段
  77. */
  78. public function info()
  79. {
  80. $callback = Request::input('callback');
  81. //
  82. $user = Users::authE();
  83. if (Base::isError($user)) {
  84. if (strlen($callback) > 3) {
  85. return $callback . '(' . json_encode($user) . ')';
  86. }
  87. return $user;
  88. } else {
  89. $user = $user['data'];
  90. }
  91. //
  92. if (strlen($callback) > 3) {
  93. return $callback . '(' . json_encode(Base::retSuccess('success', Users::retInfo($user))) . ')';
  94. }
  95. return Base::retSuccess('success', Users::retInfo($user));
  96. }
  97. /**
  98. * 获取指定会员基本信息
  99. *
  100. * @apiParam {String} username 会员用户名
  101. */
  102. public function basic()
  103. {
  104. return Base::retSuccess('success', Users::username2basic(trim(Request::input('username'))));
  105. }
  106. /**
  107. * 搜索会员列表
  108. *
  109. * @apiParam {Object} where 搜索条件
  110. * - where.usernameequal
  111. * - where.username
  112. * - where.nousername
  113. * - where.identity
  114. * - where.noidentity
  115. * - where.projectid
  116. * - where.noprojectid
  117. * @apiParam {Number} [take] 获取数量,10-100
  118. */
  119. public function searchinfo()
  120. {
  121. $keys = Request::input('where');
  122. $whereArr = [];
  123. $whereRaw = null;
  124. if ($keys['usernameequal']) $whereArr[] = ['username', '=', $keys['usernameequal']];
  125. if ($keys['identity']) $whereArr[] = ['identity', 'like', '%,' . $keys['identity'] . ',%'];
  126. if ($keys['noidentity']) $whereArr[] = ['identity', 'not like', '%,' . $keys['noidentity'] . ',%'];
  127. if ($keys['username']) {
  128. $whereRaw.= $whereRaw ? ' AND ' : '';
  129. $whereRaw.= "(`username` LIKE '%" . $keys['username'] . "%' OR `nickname` LIKE '%" . $keys['username'] . "%')";
  130. }
  131. if (intval($keys['projectid']) > 0) {
  132. $whereRaw.= $whereRaw ? ' AND ' : '';
  133. $whereRaw.= "`username` IN (SELECT username FROM `" . env('DB_PREFIX') . "project_users` WHERE `type`='成员' AND `projectid`=" . intval($keys['projectid']) .")";
  134. }
  135. if ($keys['nousername']) {
  136. $nousername = [];
  137. foreach (explode(",", $keys['nousername']) AS $name) {
  138. $name = trim($name);
  139. if ($name && !in_array($name, $nousername)) {
  140. $nousername[] = $name;
  141. }
  142. }
  143. if ($nousername) {
  144. $whereRaw.= $whereRaw ? ' AND ' : '';
  145. $whereRaw.= "(`username` NOT IN ('" . implode("','", $nousername) . "'))";
  146. }
  147. }
  148. if (intval($keys['noprojectid']) > 0) {
  149. $whereRaw.= $whereRaw ? ' AND ' : '';
  150. $whereRaw.= "`username` NOT IN (SELECT username FROM `" . env('DB_PREFIX') . "project_users` WHERE `type`='成员' AND `projectid`=" . intval($keys['noprojectid']) .")";
  151. }
  152. //
  153. $lists = DBCache::table('users')->select(['id', 'username', 'nickname', 'userimg', 'profession'])
  154. ->where($whereArr)
  155. ->whereRaw($whereRaw)
  156. ->orderBy('id')
  157. ->cacheMinutes(now()->addSeconds(10))
  158. ->take(Min(Max(Base::nullShow(Request::input('take'), 10), 1), 100))
  159. ->get();
  160. foreach ($lists AS $key => $item) {
  161. $lists[$key]['userimg'] = Users::userimg($item['userimg']);
  162. $lists[$key]['identitys'] = explode(",", trim($item['identity'], ","));
  163. $lists[$key]['setting'] = Base::string2array($item['setting']);
  164. }
  165. return Base::retSuccess('success', $lists);
  166. }
  167. /**
  168. * 修改资料
  169. *
  170. * @apiParam {Object} [userimg] 会员头像
  171. * @apiParam {String} [nickname] 昵称
  172. * @apiParam {String} [profession] 职位/职称
  173. * @apiParam {String} [bgid] 背景编号
  174. */
  175. public function editdata()
  176. {
  177. $user = Users::authE();
  178. if (Base::isError($user)) {
  179. return $user;
  180. } else {
  181. $user = $user['data'];
  182. }
  183. //
  184. $array = [];
  185. //头像
  186. $userimg = Request::input('userimg');
  187. if ($userimg) {
  188. $userimg = is_array($userimg) ? $userimg[0]['path'] : $userimg;
  189. $array['userimg'] = Base::unFillUrl($userimg);
  190. }
  191. //昵称
  192. $nickname = trim(Request::input('nickname'));
  193. if ($nickname) {
  194. if (mb_strlen($nickname) < 2) {
  195. return Base::retError('昵称不可以少于2个字!');
  196. } elseif (mb_strlen($nickname) > 8) {
  197. return Base::retError('昵称最多只能设置8个字!');
  198. } else {
  199. $array['nickname'] = $nickname;
  200. }
  201. }
  202. //职位/职称
  203. $profession = trim(Request::input('profession'));
  204. if ($profession) {
  205. if (mb_strlen($profession) < 2) {
  206. return Base::retError('昵称不可以少于2个字!');
  207. } elseif (mb_strlen($profession) > 20) {
  208. return Base::retError('昵称最多只能设置20个字!');
  209. } else {
  210. $array['profession'] = $profession;
  211. }
  212. }
  213. //背景
  214. $bgid = intval(Request::input('bgid'));
  215. if ($bgid > 0) {
  216. $array['bgid'] = $bgid;
  217. }
  218. //
  219. if ($array) {
  220. DB::table('users')->where('id', $user['id'])->update($array);
  221. } else {
  222. return Base::retError('请设置要修改的内容!');
  223. }
  224. return Base::retSuccess('修改成功!');
  225. }
  226. /**
  227. * 修改密码
  228. *
  229. * @apiParam {String} oldpass 旧密码
  230. * @apiParam {String} newpass 新密码
  231. */
  232. public function editpass()
  233. {
  234. $user = Users::authE();
  235. if (Base::isError($user)) {
  236. return $user;
  237. } else {
  238. $user = $user['data'];
  239. }
  240. //
  241. $oldpass = trim(Request::input('oldpass'));
  242. $newpass = trim(Request::input('newpass'));
  243. if (strlen($newpass) < 6) {
  244. return Base::retError('密码设置不能小于6位数!');
  245. } elseif (strlen($newpass) > 32) {
  246. return Base::retError('密码最多只能设置32位数!');
  247. }
  248. if ($oldpass == $newpass) {
  249. return Base::retError('新旧密码一致!');
  250. }
  251. //
  252. if ($user['setpass']) {
  253. $verify = DB::table('users')->where(['id'=>$user['id'], 'userpass'=>Base::md52($oldpass)])->count();
  254. if (empty($verify)) {
  255. return Base::retError('请填写正确的旧密码!');
  256. }
  257. }
  258. DB::table('users')->where('id', $user['id'])->update(['encrypt' => Base::generatePassword(6), 'userpass'=>Base::md52($newpass)]);
  259. return Base::retSuccess('修改成功');
  260. }
  261. /**
  262. * 团队列表
  263. *
  264. * @apiParam {Object} [sorts] 排序方式,格式:{key:'', order:''}
  265. * - key: username|id(默认)
  266. * - order: asc|desc
  267. * @apiParam {Number} [firstchart] 是否获取首字母,1:获取
  268. * @apiParam {Number} [page] 当前页,默认:1
  269. * @apiParam {Number} [pagesize] 每页显示数量,默认:10,最大:100
  270. */
  271. public function team__lists()
  272. {
  273. $user = Users::authE();
  274. if (Base::isError($user)) {
  275. return $user;
  276. } else {
  277. $user = $user['data'];
  278. }
  279. //
  280. $orderBy = '`id` DESC';
  281. $sorts = Base::json2array(Request::input('sorts'));
  282. if (in_array($sorts['order'], ['asc', 'desc'])) {
  283. switch ($sorts['key']) {
  284. case 'username':
  285. $orderBy = '`' . $sorts['key'] . '` ' . $sorts['order'] . ',`id` DESC';
  286. break;
  287. }
  288. }
  289. //
  290. $lists = DB::table('users')->select(['id', 'username', 'nickname', 'userimg', 'profession', 'regdate'])->orderByRaw($orderBy)->paginate(Min(Max(Base::nullShow(Request::input('pagesize'), 10), 1), 100));
  291. $lists = Base::getPageList($lists);
  292. if ($lists['total'] == 0) {
  293. return Base::retError('未找到任何相关的团队成员');
  294. }
  295. foreach ($lists['lists'] AS $key => $item) {
  296. $lists['lists'][$key]['userimg'] = Users::userimg($item['userimg']);
  297. $lists['lists'][$key]['firstchart'] = Base::getFirstCharter($item['username']);
  298. }
  299. return Base::retSuccess('success', $lists);
  300. }
  301. /**
  302. * 添加团队成员
  303. *
  304. * @apiParam {String} username 用户名
  305. * @apiParam {String} userpass 密码
  306. * @apiParam {Object} [userimg] 会员头像
  307. * @apiParam {String} [nickname] 昵称
  308. * @apiParam {String} [profession] 职位/职称
  309. */
  310. public function team__add()
  311. {
  312. $user = Users::authE();
  313. if (Base::isError($user)) {
  314. return $user;
  315. } else {
  316. $user = $user['data'];
  317. }
  318. //
  319. if (Base::isError(Users::identity('admin'))) {
  320. return Base::retError('身份权限不足!', [], -1);
  321. }
  322. //头像
  323. $userimg = Request::input('userimg');
  324. if ($userimg) {
  325. $userimg = is_array($userimg) ? $userimg[0]['path'] : $userimg;
  326. }
  327. //昵称
  328. $nickname = trim(Request::input('nickname'));
  329. if ($nickname) {
  330. if (mb_strlen($nickname) < 2) {
  331. return Base::retError('昵称不可以少于2个字!');
  332. } elseif (mb_strlen($nickname) > 8) {
  333. return Base::retError('昵称最多只能设置8个字!');
  334. }
  335. }
  336. //职位/职称
  337. $profession = trim(Request::input('profession'));
  338. if ($profession) {
  339. if (mb_strlen($profession) < 2) {
  340. return Base::retError('昵称不可以少于2个字!');
  341. } elseif (mb_strlen($profession) > 20) {
  342. return Base::retError('昵称最多只能设置20个字!');
  343. }
  344. }
  345. //开始注册
  346. $user = Users::reg(trim(Request::input('username')), trim(Request::input('userpass')), [
  347. 'userimg' => $userimg ?: '',
  348. 'nickname' => $nickname ?: '',
  349. 'profession' => $profession ?: '',
  350. ]);
  351. if (Base::isError($user)) {
  352. return $user;
  353. } else {
  354. return Base::retSuccess('添加成功!');
  355. }
  356. }
  357. /**
  358. * 删除团队成员
  359. *
  360. * @apiParam {String} username 用户名
  361. */
  362. public function team__delete()
  363. {
  364. $user = Users::authE();
  365. if (Base::isError($user)) {
  366. return $user;
  367. } else {
  368. $user = $user['data'];
  369. }
  370. //
  371. if (Base::isError(Users::identity('admin'))) {
  372. return Base::retError('身份权限不足!', [], -1);
  373. }
  374. $username = intval(Request::input('username'));
  375. if ($user['username'] == $username) {
  376. return Base::retError('不能删除自己!');
  377. }
  378. //
  379. if (DB::table('users')->where('username', $username)->delete()) {
  380. return Base::retSuccess('删除成功!');
  381. } else {
  382. return Base::retError('删除失败!');
  383. }
  384. }
  385. }