PageRenderTime 37ms CodeModel.GetById 9ms RepoModel.GetById 1ms app.codeStats 0ms

/hack/bank/index.php

https://bitbucket.org/johnroyer/phpwind8.7
PHP | 392 lines | 315 code | 47 blank | 30 comment | 101 complexity | 15ea40fe6b11de488b38b9f254107575 MD5 | raw file
  1. <?php
  2. !function_exists('readover') && exit('Forbidden');
  3. $wind_in='bank';
  4. //* require_once pwCache::getPath(D_P.'data/bbscache/bk_config.php');
  5. pwCache::getData(D_P.'data/bbscache/bk_config.php');
  6. $groupid == 'guest' && Showmsg('not_login');
  7. $bk_open == '0' && Showmsg('bk_close');
  8. $userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
  9. $bankdb = $userService->get($winduid, false, false, true);//deposit,startdate,ddeposit,dstartdate
  10. require_once(R_P.'require/credit.php');
  11. $creditdb = $credit->get($winduid,'CUSTOM');
  12. S::gp(array('action'));
  13. if (empty($action)) {
  14. $showdb = array();
  15. foreach ($creditdb as $key => $value) {
  16. $_CREDITDB[$key] && $showdb[$key] = array($_CREDITDB[$key][0],$value);
  17. }
  18. if (!$bankdb) {
  19. $bankdb['deposit'] = $bankdb['ddeposit'] = $bankdb['startdate'] = $bankdb['dstartdate'] = 0;
  20. }
  21. if ($bankdb['startdate'] && $timestamp>$bankdb['startdate']) {
  22. $accrual = round((floor(($timestamp-$bankdb['startdate'])/86400))*$bankdb['deposit']*$bk_rate/100);
  23. } else {
  24. $accrual = 0;
  25. }
  26. $ddates = floor(($timestamp-$bankdb['dstartdate'])/($bk_ddate*30*86400));
  27. if ($bankdb['dstartdate'] && $ddates) {
  28. $daccrual = round($ddates*$bk_ddate*30*$bankdb['ddeposit']*$bk_drate/100);
  29. } else {
  30. $daccrual = 0;
  31. }
  32. $allmoney = $winddb['money'] + $bankdb['deposit'] + $bankdb['ddeposit'];
  33. if (!$bankdb['deposit'] || !$bankdb['startdate']) {
  34. $bankdb['savetime'] = "--";
  35. } else {
  36. $bankdb['savetime'] = get_date($bankdb['startdate']);
  37. }
  38. if (!$bankdb['ddeposit'] || !$bankdb['dstartdate']) {
  39. $bankdb['dsavetime'] = "--";
  40. } else {
  41. $bankdb['dsavetime'] = get_date($bankdb['dstartdate'],'Y-m-d');
  42. $endtime = get_date($bankdb['dstartdate']+$bk_ddate*30*86400,'Y-m-d');
  43. }
  44. foreach ($_CREDITDB as $key => $value) {
  45. if (!$showdb[$key]) {
  46. $showdb[$key][0] = $value[0];
  47. $showdb[$key][1] = 0;
  48. }
  49. }
  50. !$bk_num && $bk_num=10;
  51. if (!$bk_per || $timestamp - pwFilemtime(D_P."data/bbscache/bank_sort.php") > $bk_per*3600) {
  52. $_DESPOSTDB = array();
  53. $query = $db->query("SELECT i.uid,m.username,i.deposit,i.startdate FROM pw_memberinfo i LEFT JOIN pw_members m ON m.uid=i.uid ORDER BY i.deposit DESC ".S::sqlLimit($bk_num));
  54. while ($deposit = $db->fetch_array($query)) {
  55. if ($deposit['deposit']) {
  56. $deposit['startdate'] = $deposit['startdate'] ? get_date($deposit['startdate']) : '';
  57. $_DESPOSTDB[] = array($deposit['uid'],$deposit['username'],$deposit['deposit'], $deposit['startdate']);
  58. }
  59. }
  60. $_DDESPOSTDB = array();
  61. $query = $db->query("SELECT i.uid,username,ddeposit,dstartdate FROM pw_memberinfo i LEFT JOIN pw_members m ON m.uid=i.uid ORDER BY ddeposit DESC ".S::sqlLimit($bk_num));
  62. while ($deposit = $db->fetch_array($query)) {
  63. if ($deposit['ddeposit']) {
  64. $deposit['dstartdate'] = $deposit['dstartdate'] ? get_date($deposit['dstartdate']) : '';
  65. $_DDESPOSTDB[] = array($deposit['uid'],$deposit['username'],$deposit['ddeposit'], $deposit['dstartdate']);
  66. }
  67. }
  68. $wirtedb = savearray('_DESPOSTDB',$_DESPOSTDB);
  69. $wirtedb.= "\n".savearray('_DDESPOSTDB',$_DDESPOSTDB);
  70. pwCache::writeover(D_P.'data/bbscache/bank_sort.php',"<?php\r\n".$wirtedb.'?>');
  71. }
  72. include (D_P."data/bbscache/bank_sort.php");
  73. require_once PrintHack('index');footer();
  74. }
  75. if ($_POST['action'] && $bk_timelimit && ($timestamp-$bankdb['startdate']<$bk_timelimit || $timestamp-$bankdb['dstartdate']<$bk_timelimit)) {
  76. Showmsg('bk_time_limit');
  77. }
  78. if ($_POST['action'] == 'save') {
  79. S::gp(array('savemoney','btype'),'P',2);
  80. if (!is_numeric($savemoney) || $savemoney <= 0) {
  81. Showmsg('bk_save_fillin_error');
  82. }
  83. /*
  84. $db->query("LOCK TABLES pw_memberdata WRITE,pw_memberinfo WRITE");//表鎖
  85. $lockfile = D_P.'data/bbscache/lock_bank.txt';
  86. $fp = fopen($lockfile,'wb+');
  87. flock($fp,LOCK_EX);//文件鎖
  88. */
  89. if (procLock('bank_save',$winduid)) {
  90. if($savemoney > $credit->get($winduid,'money')) {
  91. procUnLock('bank_save',$winduid);
  92. Showmsg('bk_save_error');
  93. }
  94. if($btype != 1 && $btype != 2){
  95. procUnLock('bank_save',$winduid);
  96. Showmsg('undefined_action');
  97. }
  98. $credit->addLog('hack_banksave'.$btype,array('money' => -$savemoney),array(
  99. 'uid' => $winduid,
  100. 'username' => $windid,
  101. 'ip' => $onlineip
  102. ));
  103. $credit->set($winduid,'money',-$savemoney);
  104. banksave($winduid,$savemoney,$bankdb,$btype);
  105. //fclose($fp);
  106. //$db->query("UNLOCK TABLES");
  107. require_once(R_P.'require/writelog.php');
  108. $log = array(
  109. 'type' => 'bk_save',
  110. 'username1' => $windid,
  111. 'username2' => '',
  112. 'field1' => $savemoney,
  113. 'field2' => $winduid,
  114. 'field3' => '',
  115. 'descrip' => 'bk_save_descrip_'.$btype,
  116. 'timestamp' => $timestamp,
  117. 'ip' => $onlineip,
  118. );
  119. writeforumlog($log);
  120. procUnLock('bank_save',$winduid);
  121. refreshto($basename, 'bank_savesuccess');
  122. } else {
  123. Showmsg('proclock');
  124. }
  125. } elseif ($_POST['action'] == 'draw') {
  126. S::gp(array('drawmoney','btype'),'P',2);
  127. if (!is_numeric($drawmoney) || $drawmoney <= 0) {
  128. Showmsg('bk_draw_fillin_error');
  129. }
  130. $btype != 1 && $btype != 2 && Showmsg('undefined_action');
  131. /*
  132. $db->query("LOCK TABLES pw_memberdata WRITE,pw_memberinfo WRITE");
  133. $lockfile = D_P.'data/bbscache/lock_bank.txt';
  134. $fp = fopen($lockfile,'wb+');
  135. flock($fp,LOCK_EX);
  136. */
  137. if (procLock('bank_draw',$winduid)) {
  138. $userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
  139. $bankdb = $userService->get($winduid, false, false, true);//deposit,startdate,ddeposit,dstartdate
  140. if ($btype == 1) {
  141. if ($drawmoney > $bankdb['deposit']){
  142. procUnLock('bank_draw',$winduid);
  143. Showmsg('bk_draw_error');
  144. }
  145. } else {
  146. if ($drawmoney > $bankdb['ddeposit']){
  147. procUnLock('bank_draw',$winduid);
  148. Showmsg('bk_draw_error');
  149. }
  150. }
  151. bankdraw($winduid,$drawmoney,$bankdb,$btype);
  152. $credit->addLog('hack_bankdraw'.$btype,array('money' => $drawmoney),array(
  153. 'uid' => $winduid,
  154. 'username' => $windid,
  155. 'ip' => $onlineip
  156. ));
  157. $credit->set($winduid,'money',$drawmoney);
  158. //fclose($fp);
  159. //$db->query("UNLOCK TABLES");
  160. require_once(R_P.'require/writelog.php');
  161. $log = array(
  162. 'type' => 'bk_draw',
  163. 'username1' => $windid,
  164. 'username2' => '',
  165. 'field1' => $drawmoney,
  166. 'field2' => $winduid,
  167. 'field3' => '',
  168. 'descrip' => 'bk_draw_descrip_'.$btype,
  169. 'timestamp' => $timestamp,
  170. 'ip' => $onlineip,
  171. );
  172. writeforumlog($log);
  173. procUnLock('bank_draw',$winduid);
  174. refreshto($basename,'bank_drawsuccess');
  175. } else {
  176. Showmsg('proclock');
  177. }
  178. } elseif ($_POST['action'] == 'virement') {
  179. if ($bk_virement != 1) {
  180. Showmsg('bk_virement_close');
  181. }
  182. S::gp(array('to_money','pwuser','memo'));
  183. $to_money = (int)$to_money;
  184. if (!is_numeric($to_money) || $to_money <= 0 || $to_money < $bk_virelimit) {
  185. Showmsg('bk_virement_count_error');
  186. }
  187. $memo = S::escapeChar($memo);
  188. strlen($memo) > 255 && $memo = substrs($memo,255);
  189. $pwuser = trim($pwuser);
  190. $userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
  191. $userdb = $userService->getByUserName($pwuser);//uid,username
  192. if (!$pwuser || !$userdb) {
  193. $errorname = S::escapeChar($pwuser);
  194. Showmsg('user_not_exists');
  195. }
  196. if ($userdb['uid'] == $winduid) {
  197. Showmsg('bk_virement_error');
  198. }
  199. $to_money = floor($to_money);
  200. $to_shouxu = round($bk_virerate*$to_money/100);
  201. $needmoney = $to_money+$to_shouxu;
  202. /*
  203. $db->query("LOCK TABLES pw_memberdata WRITE,pw_memberinfo WRITE");
  204. $lockfile = D_P.'data/bbscache/lock_bank.txt';
  205. $fp = fopen($lockfile,'wb+');
  206. flock($fp,LOCK_EX);
  207. */
  208. //if (procLock('bank_virement',$winduid)) {
  209. $userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
  210. $bankdb = $userService->get($winduid, false, false, true);//deposit,startdate,ddeposit,dstartdate
  211. if ($needmoney > $bankdb['deposit'] + $bankdb['ddeposit']) {
  212. Showmsg('bk_no_enough_deposit');
  213. }
  214. $to_bankdb = $userService->get($userdb['uid'], false, false, true);//deposit,startdate
  215. if ($needmoney <= $bankdb['deposit']) {
  216. bankdraw($winduid,$needmoney,$bankdb,1);
  217. } else {
  218. bankdraw($winduid,$bankdb['deposit'],$bankdb,1);
  219. bankdraw($winduid,$needmoney-$bankdb['deposit'],$bankdb,2);
  220. }
  221. banksave($userdb['uid'],$to_money,$to_bankdb,1);
  222. //fclose($fp);
  223. //$db->query("UNLOCK TABLES");
  224. M::sendNotice(
  225. array($pwuser),
  226. array(
  227. 'title' => getLangInfo('writemsg','virement_title'),
  228. 'content' => getLangInfo('writemsg','virement_content',array(
  229. 'windid' => $windid,
  230. 'to_money' => $to_money,
  231. 'memo' => stripslashes($memo)
  232. )),
  233. )
  234. );
  235. require_once(R_P.'require/writelog.php');
  236. $log = array(
  237. 'type' => 'bk_vire',
  238. 'username1' => $windid,
  239. 'username2' => $pwuser,
  240. 'field1' => $to_money,
  241. 'field2' => $winduid,
  242. 'field3' => $userdb['uid'],
  243. 'descrip' => 'bk_vire_descrip',
  244. 'timestamp' => $timestamp,
  245. 'ip' => $onlineip,
  246. );
  247. writeforumlog($log);
  248. procUnLock('bank_virement',$winduid);
  249. refreshto($basename,'bank_viresuccess');
  250. //} else {
  251. // Showmsg('proclock');
  252. //}
  253. } elseif ($action == 'log') {
  254. require_once GetLang('logtype');
  255. S::gp(array('type','page','to'));
  256. $sqladd = '';
  257. $select = array();
  258. if ($type && in_array($type,array('bk_save','bk_draw','bk_vire'))) {
  259. $sqladd = " AND type=".S::sqlEscape($type);
  260. $select[$type] = "selected";
  261. }
  262. (!is_numeric($page) || $page < 1) && $page = 1;
  263. $sqlfiled = $to ? 'username2' : 'username1';
  264. $limit = S::sqlLimit(($page-1)*$db_perpage,$db_perpage);
  265. $rt = $db->get_one("SELECT COUNT(*) AS sum FROM pw_forumlog WHERE type LIKE 'bk\_%' AND $sqlfiled=".S::sqlEscape($windid).$sqladd);
  266. $pages = numofpage($rt['sum'],$page,ceil($rt['sum']/$db_perpage),"$basename&action=log&type=$type&to=$to&");
  267. $query = $db->query("SELECT * FROM pw_forumlog WHERE type LIKE 'bk\_%' AND $sqlfiled=".S::sqlEscape($windid).$sqladd." ORDER BY id DESC $limit");
  268. while ($rt = $db->fetch_array($query)) {
  269. $rt['date'] = get_date($rt['timestamp']);
  270. $rt['descrip']= str_replace(array('[b]','[/b]'),array('<b>','</b>'),$rt['descrip']);
  271. $to && $rt['ip'] = $_G['viewipfrom'] ? $rt['ip'] : '保密';
  272. $logdb[] = $rt;
  273. }
  274. require_once PrintHack('index');footer();
  275. }
  276. function banksave($uid,$money,$bankdb,$type) {
  277. global $db,$timestamp,$bk_rate,$bk_ddate,$bk_drate,$credit;
  278. $money = intval($money);
  279. $userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
  280. if ($type == 1) {
  281. if ($bankdb['startdate'] && $timestamp>$bankdb['startdate']) {
  282. $accrual = round((floor(($timestamp-$bankdb['startdate'])/86400))*$bankdb['deposit']*$bk_rate/100);
  283. //銀行利息
  284. } else {
  285. $accrual = 0;
  286. }
  287. if ($bankdb) {
  288. $userService->update($uid, array(), array(), array('startdate'=>$timestamp));
  289. $userService->updateByIncrement($uid, array(), array(), array('deposit'=>($money+$accrual)));
  290. } else {
  291. $userService->update($uid, array(), array(), array('deposit'=>$money,'startdate'=>$timestamp));
  292. }
  293. } else {
  294. $ddates = floor(($timestamp-$bankdb['dstartdate'])/($bk_ddate*30*86400));
  295. if ($bankdb['dstartdate'] && $ddates) {
  296. $daccrual = round($ddates*$bk_ddate*30*$bankdb['ddeposit']*$bk_drate/100);
  297. } elseif ($bankdb['dstartdate'] && !$ddates) {
  298. $daccrual = round((floor(($timestamp-$bankdb['dstartdate'])/86400))*$bankdb['ddeposit']*$bk_rate/100);
  299. } else {
  300. $daccrual = 0;
  301. }
  302. if ($bankdb) {
  303. $userService->update($uid, array(), array(), array('dstartdate'=>$timestamp));
  304. $userService->updateByIncrement($uid, array(), array(), array('ddeposit'=>($money+$daccrual)));
  305. } else {
  306. $userService->update($uid, array(), array(), array('ddeposit'=>$money,'dstartdate'=>$timestamp));
  307. }
  308. }
  309. }
  310. function bankdraw($uid,$money,$bankdb,$type) {
  311. global $db,$timestamp,$bk_rate,$bk_ddate,$bk_drate;
  312. $money = intval($money);
  313. $userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
  314. if ($type == 1) {
  315. if ($bankdb['startdate'] && $timestamp>$bankdb['startdate']) {
  316. $accrual = round((floor(($timestamp-$bankdb['startdate'])/86400))*$bankdb['deposit']*$bk_rate/100);
  317. } else {
  318. $accrual = 0;
  319. }
  320. $userService->update($uid, array(), array(), array('startdate'=>$timestamp));
  321. $userService->updateByIncrement($uid, array(), array(), array('deposit'=>($accrual-$money)));
  322. } else {
  323. $ddates = floor(($timestamp-$bankdb['dstartdate'])/($bk_ddate*30*86400));
  324. if ($bankdb['dstartdate'] && $ddates) {
  325. $daccrual = round($ddates*$bk_ddate*30*$bankdb['ddeposit']*$bk_drate/100);
  326. } else {
  327. $daccrual = 0;
  328. }
  329. $userService->update($uid, array(), array(), array('dstartdate'=>$timestamp));
  330. $userService->updateByIncrement($uid, array(), array(), array('ddeposit'=>($daccrual-$money)));
  331. }
  332. }
  333. function savearray($name,$array) {
  334. $arraydb="\$$name=array(\r\n\t\t";
  335. foreach ($array as $value1) {
  336. $arraydb .= 'array(';
  337. foreach ($value1 as $value2) {
  338. $arraydb .= '"'.addslashes($value2).'",';
  339. }
  340. $arraydb .= "),\r\n\t\t";
  341. }
  342. $arraydb .= ");\r\n";
  343. return $arraydb;
  344. }
  345. ?>