PageRenderTime 50ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/lib/gather/gathercache/pw_members.cache.php

https://bitbucket.org/johnroyer/phpwind8.7
PHP | 775 lines | 465 code | 52 blank | 258 comment | 72 complexity | 00093394e70180865586a3636c8ad008 MD5 | raw file
  1. <?php
  2. ! defined ( 'P_W' ) && exit ( 'Forbidden' );
  3. /**
  4. * 用戶信息緩存類,包含對如下表的緩存 pw_members, pw_memberdata, pw_memberInfo, pw_memberCredit, pw_singleRight
  5. *
  6. */
  7. class GatherCache_PW_Members_Cache extends GatherCache_Base_Cache {
  8. var $_defaultCache = PW_CACHE_MEMCACHE;
  9. var $_prefix = 'member_';
  10. var $_membersField = array ('uid' => null, 'username' => null, 'password' => null, 'safecv' => null, 'email' => null, 'groupid' => null, 'memberid' => null, 'groups' => null, 'icon' => null, 'gender' => null, 'regdate' => null, 'signature' => null, 'introduce' => null, 'oicq' => null, 'aliww' => null, 'icq' => null, 'msn' => null, 'yahoo' => null, 'site' => null, 'location' => null, 'honor' => null, 'bday' => null, 'lastaddrst' => null, 'yz' => null, 'timedf' => null, 'style' => null, 'datefm' => null, 't_num' => null, 'p_num' => null, 'attach' => null, 'hack' => null, 'newpm' => null, 'banpm' => null, 'msggroups' => null, 'medals' => null, 'userstatus' => null, 'shortcut' => null );
  11. var $_memberDataField = array ('uid' => null, 'postnum' => null, 'digests' => null, 'rvrc' => null, 'money' => null, 'credit' => null, 'currency' => null, 'lastvisit' => null, 'thisvisit' => null, 'lastpost' => null, 'onlinetime' => null, 'monoltime' => null, 'todaypost' => null, 'monthpost' => null, 'uploadtime' => null, 'uploadnum' => null, 'follows' => null, 'fans' => null, 'newfans' => null, 'newreferto' => null, 'newcomment' => null, 'onlineip' => null, 'starttime' => null, 'postcheck' => null, 'pwdctime' => null, 'f_num' => null, 'creditpop' => null, 'jobnum' => null, 'lastmsg' => null, 'lastgrab' => null, 'punch' => null,'newnotice' => null, 'newrequest' => null );
  12. var $_memberInfoField = array ('uid' => null, 'adsips' => null, 'credit' => null, 'deposit' => null, 'startdate' => null, 'ddeposit' => null, 'dstartdate' => null, 'regreason' => null, 'readmsg' => null, 'delmsg' => null, 'tooltime' => null, 'replyinfo' => null, 'lasttime' => null, 'digtid' => null, 'customdata' => null, 'tradeinfo' => null );
  13. var $_singleRightField = array ('uid' => null, 'visit' => null, 'post' => null, 'reply' => null );
  14. /**
  15. * 獲取一條members表信息
  16. *
  17. * @param int $userId
  18. * @return array
  19. */
  20. function getMembersByUserId($userId) {
  21. $userId = S::int ( $userId );
  22. if ($userId < 1) {
  23. return false;
  24. }
  25. $key = $this->_getMembersKey ( $userId );
  26. $result = $this->_cacheService->get ( $key );
  27. if ($result === false) {
  28. $result = $this->_getMembersByUserIdNoCache ( $userId );
  29. $result = $result ? $result : array();
  30. $this->_cacheService->set ( $key, $result);
  31. }
  32. return $result;
  33. }
  34. /**
  35. * 獲取一條MemberData信息
  36. *
  37. * @param int $userId
  38. * @return array
  39. */
  40. function getMemberDataByUserId($userId) {
  41. $userId = S::int ( $userId );
  42. if ($userId < 1) {
  43. return false;
  44. }
  45. $key = $this->_getMemberDataKey ( $userId );
  46. $result = $this->_cacheService->get ( $key );
  47. if ($result === false) {
  48. $result = $this->_getMemberDataByUserIdNoCache ( $userId );
  49. $result = $result ? $result : array();
  50. $this->_cacheService->set ( $key, $result );
  51. }
  52. return $result;
  53. }
  54. /**
  55. * 獲取一條MemberInfo信息
  56. *
  57. * @param int $userId
  58. * @return array
  59. */
  60. function getMemberInfoByUserId($userId) {
  61. $userId = S::int ( $userId );
  62. if ($userId < 1) {
  63. return false;
  64. }
  65. $key = $this->_getMemberInfoKey ( $userId );
  66. $result = $this->_cacheService->get ( $key );
  67. if ($result === false ) {
  68. $result = $this->_getMemberInfoByUserIdNoCache ( $userId );
  69. $result = $result ? $result : array();
  70. $this->_cacheService->set ( $key, $result );
  71. }
  72. return $result;
  73. }
  74. /**
  75. * 獲取一條SingleRight信息
  76. *
  77. * @param int $userId
  78. * @return array
  79. */
  80. function getSingleRightByUserId($userId) {
  81. $userId = S::int ( $userId );
  82. if ($userId < 1 ) {
  83. return false;
  84. }
  85. $key = $this->_getSingleRightKey ( $userId );
  86. $result = $this->_cacheService->get ( $key );
  87. if ($result === false){
  88. $result = $this->_getSingleRightByUserIdNoCache ( $userId );
  89. $result = $result ? $result : array();
  90. $this->_cacheService->set ( $key, $result );
  91. }
  92. return $result;
  93. }
  94. /**
  95. * 批量獲取一組Members信息
  96. *
  97. * @param array $userIds
  98. * @return array
  99. */
  100. function getMembersByUserIds($userIds) {
  101. if (! S::isArray ( $userIds )) {
  102. return false;
  103. }
  104. $userIds = array_unique ( $userIds );
  105. $result = $_tmpResult = $keys = $_tmpUserIds = array ();
  106. foreach ( $userIds as $userId ) {
  107. $keys [$this->_getMembersKey ( $userId )] = $userId;
  108. }
  109. if (($members = $this->_cacheService->get ( array_keys($keys) ))) {
  110. $_unique = $this->getUnique();
  111. foreach ($keys as $key=>$userId){
  112. $_key = $_unique . $key;
  113. if (isset($members[$_key]) && is_array($members[$_key])){
  114. $_tmpUserIds [] = $userId;
  115. $result[$userId] = $members[$_key];
  116. }
  117. }
  118. }
  119. $userIds = array_diff ( $userIds, $_tmpUserIds );
  120. if ($userIds) {
  121. $_tmpResult = $this->_getMembersByUserIdsNoCache ( $userIds );
  122. foreach ($userIds as $userId){
  123. $this->_cacheService->set ( $this->_getMembersKey ( $userId ), isset($_tmpResult[$userId]) ? $_tmpResult[$userId] : array() );
  124. }
  125. }
  126. return (array)$result + (array)$_tmpResult;
  127. }
  128. /**
  129. * 批量獲取一組MemberData信息
  130. *
  131. * @param array $userIds
  132. * @return array
  133. */
  134. function getMemberDataByUserIds($userIds) {
  135. if (! S::isArray ( $userIds )) {
  136. return false;
  137. }
  138. $userIds = array_unique ( $userIds );
  139. $result = $_tmpResult = $keys = $_tmpUserIds = array ();
  140. foreach ( $userIds as $userId ) {
  141. $keys [$this->_getMemberDataKey ( $userId )] = $userId;
  142. }
  143. if (($members = $this->_cacheService->get ( array_keys($keys) ))) {
  144. $_unique = $this->getUnique();
  145. foreach ($keys as $key=>$userId){
  146. $_key = $_unique . $key;
  147. if (isset($members[$_key]) && is_array($members[$_key])){
  148. $_tmpUserIds [] = $userId;
  149. $result[$userId] = $members[$_key];
  150. }
  151. }
  152. }
  153. $userIds = array_diff ( $userIds, $_tmpUserIds );
  154. if ($userIds) {
  155. $_tmpResult = $this->_getMemberDataByUserIdsNoCache ( $userIds );
  156. foreach ($userIds as $userId){
  157. $this->_cacheService->set ( $this->_getMemberDataKey ( $userId ), isset($_tmpResult[$userId]) ? $_tmpResult[$userId] : array() );
  158. }
  159. }
  160. return (array)$result + (array)$_tmpResult;
  161. }
  162. /**
  163. * 批量獲取一組MemberInfo信息
  164. *
  165. * @param array $userIds
  166. * @return array
  167. */
  168. function getMemberInfoByUserIds($userIds) {
  169. if (! S::isArray ( $userIds )) {
  170. return false;
  171. }
  172. $userIds = array_unique ( $userIds );
  173. $result = $_tmpResult = $keys = $_tmpUserIds = array ();
  174. foreach ( $userIds as $userId ) {
  175. $keys [$this->_getMemberInfoKey ( $userId )] = $userId;
  176. }
  177. if (($members = $this->_cacheService->get ( array_keys($keys) ))) {
  178. $_unique = $this->getUnique();
  179. foreach ($keys as $key=>$userId){
  180. $_key = $_unique . $key;
  181. if (isset($members[$_key]) && is_array($members[$_key])){
  182. $_tmpUserIds [] = $userId;
  183. $result[$userId] = $members[$_key];
  184. }
  185. }
  186. }
  187. $userIds = array_diff ( $userIds, $_tmpUserIds );
  188. if ($userIds) {
  189. $_tmpResult = $this->_getMemberInfoByUserIdsNoCache ( $userIds );
  190. foreach ($userIds as $userId){
  191. $this->_cacheService->set ( $this->_getMemberInfoKey ( $userId ), isset($_tmpResult[$userId]) ? $_tmpResult[$userId] : array() );
  192. }
  193. }
  194. return (array)$result + (array)$_tmpResult;
  195. }
  196. /**
  197. * 批量獲取一組MemberCredit信息
  198. *
  199. * @param array $userIds
  200. * @return array
  201. */
  202. function getMemberCreditByUserIds($userIds) {
  203. if (! S::isArray ( $userIds )) {
  204. return false;
  205. }
  206. $userIds = array_unique ( $userIds );
  207. $result = $_tmpResult = $keys = $_tmpUserIds = array ();
  208. foreach ( $userIds as $userId ) {
  209. $keys [$this->_getMemberCreditKey ( $userId )] = $userId;
  210. }
  211. if (($members = $this->_cacheService->get ( array_keys($keys) ))) {
  212. $_unique = $this->getUnique();
  213. foreach ($keys as $key=>$userId){
  214. $_key = $_unique . $key;
  215. if (isset($members[$_key]) && is_array($members[$_key])){
  216. $_tmpUserIds [] = $userId;
  217. $result[$userId] = $members[$_key];
  218. }
  219. }
  220. }
  221. $userIds = array_diff ( $userIds, $_tmpUserIds );
  222. if ($userIds) {
  223. $_tmpResult = $this->_getMemberCreditByUserIdsNoCache ( $userIds );
  224. foreach ($userIds as $userId){
  225. $this->_cacheService->set ( $this->_getMemberCreditKey ( $userId ), isset($_tmpResult[$userId]) ? $_tmpResult[$userId] : array() );
  226. }
  227. }
  228. return (array)$result + (array)$_tmpResult;
  229. }
  230. /**
  231. * 批量獲取用戶群組信息, 僅供read.php在獲取用戶信息時調用
  232. *
  233. * @param array $userIds
  234. * @return array
  235. */
  236. function getCmemberAndColonyByUserIds($userIds) {
  237. if (! S::isArray ( $userIds )) {
  238. return false;
  239. }
  240. $userIds = array_unique ( $userIds );
  241. $result = $_tmpResult = $keys = $_tmpUserIds = array ();
  242. foreach ( $userIds as $userId ) {
  243. $keys [$this->_getCmemberAndColonyKey ( $userId )] = $userId;
  244. }
  245. if (($members = $this->_cacheService->get ( array_keys($keys) ))) {
  246. $_unique = $this->getUnique();
  247. foreach ($keys as $key=>$userId){
  248. $_key = $_unique . $key;
  249. if (isset($members[$_key]) && is_array($members[$_key])){
  250. $_tmpUserIds [] = $userId;
  251. $result[$userId] = $members[$_key];
  252. }
  253. }
  254. }
  255. $userIds = array_diff ( $userIds, $_tmpUserIds );
  256. if ($userIds) {
  257. $_tmpResult = $this->_getCmemberAndColonyByUserIdsNoCache ( $userIds );
  258. foreach ($userIds as $userId){
  259. $this->_cacheService->set ( $this->_getCmemberAndColonyKey ( $userId ), isset($_tmpResult[$userId]) ? $_tmpResult[$userId] : array() );
  260. }
  261. }
  262. return (array)$result + (array)$_tmpResult;
  263. }
  264. /**
  265. * 獲取一條用戶基本信息和Data信息和SingleRight信息,僅供global.php裡的getUserByUid函數調用
  266. * 實現了這條sql語句 "SELECT m.*, md.*, sr.* FROM pw_members m LEFT JOIN pw_memberdata md ON m.uid=md.uid LEFT JOIN pw_singleright sr ON m.uid=sr.uid WHERE m.uid=" . S::sqlEscape($uid) . " AND m.groupid<>'0' AND md.uid IS NOT NULL"
  267. *
  268. * @param int $userId
  269. * @return array
  270. */
  271. /**
  272. function getMembersAndMemberDataAndSingleRightByUserId($userId) {
  273. $userId = S::int ( $userId );
  274. if ($userId < 1) return false;
  275. $membersAndMemberData = $this->getAllByUserId($userId, true, true);
  276. $singleRight = $this->getSingleRightByUserId($userId);
  277. return (array)$membersAndMemberData + ($singleRight ? (array)$singleRight : $this->_singleRightField);
  278. }
  279. **/
  280. /**
  281. * 根據一個用戶id獲取用戶名
  282. *
  283. * @param int $userId 用戶id
  284. * @return string
  285. */
  286. function getUserNameByUserId($userId) {
  287. $userId = S::int ( $userId );
  288. if ($userId < 1) return false;
  289. $result = $this->getMembersByUserId ( $userId );
  290. return $result ? $result['username'] : false;
  291. }
  292. /**
  293. * 根據用戶id批量獲取用戶名
  294. *
  295. * @param array $userIds 用戶id數組
  296. * @return array 以uid為key,用戶名為值的數組
  297. */
  298. function getUserNameByUserIds($userIds) {
  299. if (! S::isArray ( $userIds )) {
  300. return false;
  301. }
  302. if (!($members = $this->getMembersByUserIds($userIds))) return false;
  303. $_userNames = array ();
  304. foreach ( $members as $member ) {
  305. $_userNames [$member ['uid']] = $member ['username'];
  306. }
  307. return $_userNames;
  308. }
  309. /**
  310. * 獲取用戶信息
  311. *
  312. * @param int $userId 用戶ID
  313. * @param bool $isMembers 是否取用戶主要信息
  314. * @param bool $isMemberData 是否取用戶基本信息
  315. * @param bool $isMemberInfo 是否取用戶相關信息
  316. * @return array|boolean
  317. */
  318. function getAllFieldByUserId($userId, $isMembers = true, $isMemberData = false, $isMemberInfo = false) {
  319. $userId = S::int($userId);
  320. if ($userId < 1) return false;
  321. $members = $isMembers ? $this->getMembersByUserId($userId) : false;
  322. $memberData = $isMemberData ? $this->getMemberDataByUserId($userId) : false;
  323. $memberInfo = $isMemberInfo ? $this->getMemberInfoByUserId($userId) : false;
  324. return $this->_joinTables(array($isMembers, $isMemberData, $isMemberInfo), array($members, $memberData, $memberInfo));
  325. }
  326. /**
  327. * 從緩存中批量獲取用戶基本信息,Data信息,Info信息
  328. *
  329. * @param array $userIds
  330. * @return array
  331. */
  332. function getAllFieldByUserIds($userIds, $isMembers = true, $isMemberData = false, $isMemberInfo = false) {
  333. if (! S::isArray ( $userIds )) return false;
  334. $arrMembers = $isMembers ? $this->getMembersByUserIds($userIds) : array();
  335. $arrMemberData = $isMemberData ? $this->getMemberDataByUserIds($userIds) : array();
  336. $arrMemberInfo = $isMemberInfo ? $this->getMemberInfoByUserIds($userIds) : array();
  337. $result = array();
  338. foreach ($userIds as $userId){
  339. $isMembers && $members = isset ( $arrMembers [$userId]) ? $arrMembers [$userId] : false;
  340. $isMemberData && $memberData = isset ( $arrMemberData [$userId]) ? $arrMemberData [$userId] : false;
  341. $isMemberInfo && $memberInfo = isset ( $arrMemberInfo [$userId]) ? $arrMemberInfo [$userId] : false;
  342. $tmp = $this->_joinTables(array($isMembers, $isMemberData, $isMemberInfo), array($members, $memberData, $memberInfo));
  343. $tmp && $result [$userId] = $tmp;
  344. }
  345. return $result;
  346. }
  347. /**
  348. * 模擬數據庫left join的效果
  349. *
  350. * @param array $tables 需要查詢的表 array(true, false, true)
  351. * @param array $values 對應上面需要查詢的表 array($result1, false, $result3)
  352. * @return array
  353. */
  354. function _joinTables($tables, $values){
  355. $tableField = array($this->_membersField, $this->_memberDataField, $this->_memberInfoField);
  356. $tableAlias = array('m.', 'md.', 'mi.');
  357. $first = false;
  358. $result = array();
  359. foreach ($tables as $k => $table){
  360. if (!$first && $table){
  361. if (!$values[$k]) return false;
  362. $first = true;
  363. }
  364. if ($first){
  365. !$values[$k] && $values[$k] = $tableField[$k];
  366. $values[$k][$tableAlias[$k]. 'uid'] = $values[$k]['uid'];
  367. if (isset($result['credit'])) {
  368. $values[$k]['creditinfo'] = $values[$k]['credit'];
  369. $values[$k][$tableAlias[$k]. 'credit'] = $values[$k]['credit'];
  370. }
  371. (!isset($result['credit']) && $table && $values[$k]['credit']) && $result['credit'] = $values[$k]['credit'];
  372. $result += $values[$k];
  373. }
  374. }
  375. return $first ? $result : false;
  376. }
  377. /**
  378. * 清除用戶基本信息緩存
  379. *
  380. * @param array $userIds
  381. */
  382. function clearCacheForMembersByUserIds($userIds) {
  383. $userIds = ( array ) $userIds;
  384. foreach ( $userIds as $uid ) {
  385. $this->_cacheService->delete ( $this->_getAllMembersKey ( $uid ) );
  386. $this->_cacheService->delete ( $this->_getMembersKey ( $uid ) );
  387. }
  388. return true;
  389. }
  390. /**
  391. * 清除用戶Data信息緩存
  392. *
  393. * @param array $userIds
  394. */
  395. function clearCacheForMemberDataByUserIds($userIds) {
  396. $userIds = ( array ) $userIds;
  397. foreach ( $userIds as $uid ) {
  398. $this->_cacheService->delete ( $this->_getAllMembersKey ( $uid ) );
  399. $this->_cacheService->delete ( $this->_getMemberDataKey ( $uid ) );
  400. }
  401. return true;
  402. }
  403. /**
  404. * 清除用戶Info信息緩存
  405. *
  406. * @param array $userIds
  407. */
  408. function clearCacheForMemberInfoByUserIds($userIds) {
  409. $userIds = ( array ) $userIds;
  410. foreach ( $userIds as $uid ) {
  411. $this->_cacheService->delete ( $this->_getAllMembersKey ( $uid ) );
  412. $this->_cacheService->delete ( $this->_getMemberInfoKey ( $uid ) );
  413. }
  414. return true;
  415. }
  416. /**
  417. * 清除用戶的SingleRight信息
  418. *
  419. * @param array $userIds
  420. */
  421. function clearCacheForSingleRightByUserIds($userIds) {
  422. $userIds = ( array ) $userIds;
  423. foreach ( $userIds as $uid ) {
  424. $this->_cacheService->delete ( $this->_getSingleRightKey ( $uid ) );
  425. }
  426. return true;
  427. }
  428. function clearCacheForMemberCreditByUserIds($userIds) {
  429. $userIds = ( array ) $userIds;
  430. foreach ( $userIds as $uid ) {
  431. $this->_cacheService->delete ( $this->_getMemberCreditKey ( $uid ) );
  432. }
  433. return true;
  434. }
  435. function clearCacheForCmemberAndColonyByUserIds($userIds) {
  436. $userIds = ( array ) $userIds;
  437. foreach ( $userIds as $uid ) {
  438. $this->_cacheService->delete ( $this->_getCmemberAndColonyKey ( $uid ) );
  439. }
  440. return true;
  441. }
  442. function clearCacheForMemberTagsByUserIds($userIds) {
  443. $userIds = ( array ) $userIds;
  444. foreach ( $userIds as $uid ) {
  445. $this->_cacheService->delete ( $this->_getMemberTagsKey ( $uid ) );
  446. }
  447. return true;
  448. }
  449. /**
  450. * 不通過緩存直接從數據庫獲取一組用戶基本信息
  451. *
  452. * @param array $userIds 用戶id數組
  453. * @return array
  454. */
  455. function _getMembersByUserIdsNoCache($userIds) {
  456. if (! S::isArray ( $userIds )) return false;
  457. $membersDb = L::loadDB ( 'Members', 'user' );
  458. return $membersDb->getUsersByUserIds ( $userIds );
  459. }
  460. /**
  461. * 不通過緩存直接從數據庫獲取一組用戶的Data信息
  462. *
  463. * @param array $userIds 用戶id數組
  464. * @return array
  465. */
  466. function _getMemberDataByUserIdsNoCache($userIds) {
  467. if (! S::isArray ( $userIds )) return false;
  468. $memberDataDb = L::loadDB ( 'MemberData', 'user' );
  469. return $memberDataDb->getUsersByUserIds ( $userIds );
  470. }
  471. /**
  472. * 不通過緩存直接從數據庫獲取一組用戶的Info信息
  473. *
  474. * @param array $userIds 用戶id數組
  475. * @return array
  476. */
  477. function _getMemberInfoByUserIdsNoCache($userIds) {
  478. if (! S::isArray ( $userIds )) return false;
  479. $memberInfoDb = L::loadDB ( 'MemberInfo', 'user' );
  480. return $memberInfoDb->getUsersByUserIds ( $userIds );
  481. }
  482. /**
  483. * 不同過緩存直接從數據庫獲取一條用戶基本信息
  484. *
  485. * @param int $userId 用戶id
  486. * @return array
  487. */
  488. function _getMembersByUserIdNoCache($userId) {
  489. $userId = S::int ( $userId );
  490. if ($userId < 1) return false;
  491. $membersDb = L::loadDB ( 'Members', 'user' );
  492. return $membersDb->get ( $userId );
  493. }
  494. /**
  495. * 不同過緩存直接從數據庫獲取一條用戶Data信息
  496. *
  497. * @param int $userId 用戶id
  498. * @return array
  499. */
  500. function _getMemberDataByUserIdNoCache($userId) {
  501. $userId = S::int ( $userId );
  502. if ($userId < 1) return false;
  503. $memberDataDb = L::loadDB ( 'MemberData', 'user' );
  504. return $memberDataDb->get ( $userId );
  505. }
  506. /**
  507. * 不同過緩存直接從數據庫獲取一條用戶Info信息
  508. *
  509. * @param int $userId 用戶id
  510. * @return array
  511. */
  512. function _getMemberInfoByUserIdNoCache($userId) {
  513. $userId = S::int ( $userId );
  514. if ($userId < 1) return false;
  515. $memberInfoDb = L::loadDB ( 'MemberInfo', 'user' );
  516. return $memberInfoDb->get ( $userId );
  517. }
  518. /**
  519. * 不通過緩存從數據庫獲取一條用戶權限信息, 即查詢pw_singleRight表
  520. *
  521. * @param int $userId
  522. * @return array
  523. */
  524. function _getSingleRightByUserIdNoCache($userId) {
  525. $userId = S::int ( $userId );
  526. if ($userId < 1) return false;
  527. $singleRightDb = L::loadDB ( 'SingleRight', 'user' );
  528. return $singleRightDb->get ( $userId );
  529. }
  530. /**
  531. * 從數據庫獲取一組MemberCredit數據
  532. *
  533. * @param array $userIds
  534. * @return array
  535. */
  536. function _getMemberCreditByUserIdsNoCache($userIds) {
  537. if (!S::isArray($userIds)) return false;
  538. $memberCreditDb = L::loadDB ( 'MemberCredit', 'user' );
  539. $memberCredits = $memberCreditDb->gets ( $userIds );
  540. if (! S::isArray ( $memberCredits )) return false;
  541. $result = array ();
  542. foreach ( $memberCredits as $mc ) {
  543. $result [$mc ['uid']] [$mc ['cid']] = $mc ['value'];
  544. $result[$mc ['uid']]['uid'] = $mc ['uid'];
  545. }
  546. return $result;
  547. }
  548. /**
  549. * 不通過緩存直接從數據庫獲取用戶群組信息, 需要連表查詢pw_cmembers和pw_colonys
  550. *
  551. * @param int $threadId 帖子id
  552. * @return array
  553. */
  554. function _getCmemberAndColonyByUserIdsNoCache($userIds) {
  555. $cmembersDb = L::loadDB ( 'cmembers', 'colony' );
  556. return $cmembersDb->getsCmemberAndColonyByUserIds ( $userIds );
  557. }
  558. /**
  559. * 獲取用戶基本信息的緩存key
  560. *
  561. * @param int $userId 用戶id
  562. * @return string
  563. */
  564. function _getMembersKey($userId) {
  565. return $this->_prefix . 'main_uid_' . $userId;
  566. }
  567. /**
  568. * 獲取用戶Data信息的緩存key
  569. *
  570. * @param int $userId 用戶id
  571. * @return string
  572. */
  573. function _getMemberDataKey($userId) {
  574. return $this->_prefix . 'data_uid_' . $userId;
  575. }
  576. /**
  577. * 獲取用戶Info信息的緩存key
  578. *
  579. * @param int $userId 用戶id
  580. * @return string
  581. */
  582. function _getMemberInfoKey($userId) {
  583. return $this->_prefix . 'info_uid_' . $userId;
  584. }
  585. /**
  586. * 獲取SingleRight表緩存key
  587. *
  588. * @param int $userId
  589. * @return string
  590. */
  591. function _getSingleRightKey($userId) {
  592. return $this->_prefix . 'singleright_uid_' . $userId;
  593. }
  594. /**
  595. * 獲取MemberCredit表緩存key
  596. *
  597. * @param int $userId
  598. * @return string
  599. */
  600. function _getMemberCreditKey($userId) {
  601. return $this->_prefix . 'credit_uid_' . $userId;
  602. }
  603. /**
  604. * 獲會員群組信息在memcache緩存的key
  605. *
  606. * @param int $userId 用戶id
  607. * @return string
  608. */
  609. function _getCmemberAndColonyKey($userId) {
  610. return $this->_prefix . 'colony_uid_' . $userId;
  611. }
  612. /**
  613. * 獲取用戶標籤在memcache緩存的key
  614. *
  615. * @param int $userId 用戶id
  616. * @return string
  617. */
  618. function _getMemberTagsKey($userId) {
  619. return $this->_prefix . 'membertag_uid_' . $userId;
  620. }
  621. /************************ 分隔符**********************************/
  622. function _getMembersAndMemberDataAndMemberInfoByUserIdsNoCache($userIds){
  623. global $customfield;
  624. $fieldinfo = '';
  625. if (is_array($customfield)) {
  626. foreach ($customfield as $value) {
  627. !$value['ifsys'] && $fieldinfo .= ',mi.field_'.(int)$value['id'];
  628. }
  629. }
  630. $membersDb = L::loadDB ( 'Members', 'user' );
  631. return $membersDb->getMembersAndMemberDataAndMemberInfoByUserIds ( $userIds,$fieldinfo );
  632. }
  633. function _getAllMembersKey($userId){
  634. return $this->_prefix . 'all_uid_' . $userId;
  635. }
  636. /**
  637. * 獲取一組用戶信息
  638. * 查詢members,memberData, memberInfo三張表的部分字段, 僅供global.php, read.php頁面裡特定地方調用
  639. *
  640. * @param array $userIds
  641. * @param unknown_type $a 備用
  642. * @param unknown_type $b 備用
  643. * @param unknown_type $c 備用
  644. * @return array
  645. */
  646. function getAllByUserIds($userIds, $a=false, $b=false, $c=false){
  647. $userIds = array_unique ( (array)$userIds );
  648. $result = $_tmpResult = $keys = $_tmpUserIds = array ();
  649. foreach ( $userIds as $userId ) {
  650. $keys [$this->_getAllMembersKey ( $userId )] = $userId;
  651. }
  652. if (($members = $this->_cacheService->get ( array_keys($keys) ))) {
  653. $_unique = $this->getUnique();
  654. foreach ($keys as $key=>$userId){
  655. $_key = $_unique . $key;
  656. if (isset($members[$_key]) && is_array($members[$_key])){
  657. $_tmpUserIds [] = $userId;
  658. $result[$userId] = $members[$_key];
  659. }
  660. }
  661. }
  662. $userIds = array_diff ( $userIds, $_tmpUserIds );
  663. if ($userIds) {
  664. $_tmpResult = $this->_getMembersAndMemberDataAndMemberInfoByUserIdsNoCache ( $userIds );
  665. foreach ($userIds as $userId){
  666. $this->_cacheService->set ( $this->_getAllMembersKey ( $userId ), isset($_tmpResult[$userId]) ? $_tmpResult[$userId] : array() );
  667. }
  668. }
  669. return (array)$result + (array)$_tmpResult;
  670. }
  671. /**
  672. * 獲取一條用戶信息
  673. * 查詢members,memberData, memberInfo三張表的部分字段, 僅供global.php, read.php頁面裡特定地方調用
  674. *
  675. * @param array $userIds
  676. * @param unknown_type $a 備用
  677. * @param unknown_type $b 備用
  678. * @param unknown_type $c 備用
  679. * @return array
  680. */
  681. function getAllByUserId($userId, $a=false, $b=false, $c=false){
  682. $userId = S::int($userId);
  683. if ($userId < 1) return false;
  684. $members = $this->getAllByUserIds($userId);
  685. return $members ? current($members) : array();
  686. }
  687. /**
  688. * 獲取一條用戶信息
  689. * 查詢members,memberData, singleRight三張表的部分字段, 僅供global.php頁面裡特定地方調用
  690. *
  691. * @param array $userIds
  692. * @return array
  693. */
  694. function getMembersAndMemberDataAndSingleRightByUserId($userId) {
  695. $userId = S::int ( $userId );
  696. if ($userId < 1) return false;
  697. $membersAndMemberData = $this->getAllByUserId($userId);
  698. if (!$membersAndMemberData) return array();
  699. $singleRight = $this->getSingleRightByUserId($userId);
  700. return (array)$membersAndMemberData + ($singleRight ? (array)$singleRight : $this->_singleRightField);
  701. }
  702. /**
  703. * 根據一個用戶id獲取用戶標籤
  704. *
  705. * @param int $uid 用戶id
  706. * @return array
  707. */
  708. function getMemberTagsByUserid($userId) {
  709. $userId = S::int ( $userId );
  710. if ($userId < 1) {
  711. return false;
  712. }
  713. $key = $this->_getMemberTagsKey ( $userId );
  714. $result = $this->_cacheService->get ( $key );
  715. if ($result === false) {
  716. $memberTagsService = L::loadClass('memberTagsService', 'user');
  717. $result = $memberTagsService->getMemberTagsByUidFromDB($userId);
  718. $result = $result ? $result : array();
  719. $this->_cacheService->set ( $key, $result);
  720. }
  721. return $result;
  722. }
  723. }