PageRenderTime 55ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/source/admincp/admincp_card.php

https://github.com/kuaileshike/upload
PHP | 619 lines | 561 code | 52 blank | 6 comment | 143 complexity | 0ce681af9f6eda526df632eba16c23b3 MD5 | raw file
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: admincp_card.php 29335 2012-04-05 02:08:34Z cnteacher $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. if($operation != 'export') {
  12. cpheader();
  13. }
  14. $operation = $_GET['operation'] ? $_GET['operation'] : 'set' ;
  15. $card_setting = $_G['setting']['card'];
  16. if($operation == 'set') {
  17. $nav = 'config';
  18. $submenu['set'] = 1;
  19. } elseif ($operation == 'manage') {
  20. $nav = 'admin';
  21. $submenu['manage'] = 1;
  22. } elseif ($operation == 'type') {
  23. $nav = 'nav_card_type';
  24. $submenu['type'] = 1;
  25. } elseif ($operation == 'make') {
  26. $nav = 'nav_card_make';
  27. $submenu['make'] = 1;
  28. } elseif ($operation == 'log') {
  29. $nav = 'nav_card_log';
  30. } else {
  31. $nav = '';
  32. }
  33. if($nav != '') {
  34. if(!submitcheck('cardsubmit', 1) || $operation == 'manage' || $operation == 'type') {
  35. shownav('extended', 'nav_card', $nav);
  36. showsubmenu('nav_card', array(
  37. array('config', 'card', $submenu['set']),
  38. array('admin', 'card&operation=manage', $submenu['manage']),
  39. array('nav_card_type', 'card&operation=type', $submenu['type']),
  40. array('nav_card_make', 'card&operation=make', $submenu['make']),
  41. array(array('menu' => 'nav_card_log', 'submenu' => array(
  42. array('nav_card_log_add', 'card&operation=log&do=add', $_GET['do'] == 'add'),
  43. array('nav_card_log_del', 'card&operation=log&do=del', $_GET['do'] == 'del'),
  44. array('nav_card_log_cron', 'card&operation=log&do=cron', $_GET['do'] == 'cron')
  45. )), in_array($_GET['do'], array('add', 'del', 'cron')))
  46. ));
  47. }
  48. }
  49. if($operation == 'set') {
  50. if(!submitcheck('cardsubmit')) {
  51. showformheader('card&operation=set&');
  52. showtableheader();
  53. showsetting('card_config_open', 'card_config_open', ($card_setting['open'] ? $card_setting['open'] : 0), 'radio');
  54. showsubmit('cardsubmit');
  55. showtablefooter();
  56. showformfooter();
  57. } else {
  58. C::t('common_setting')->update('card', array('open' => $_POST['card_config_open']));
  59. updatecache('setting');
  60. cpmsg('card_config_succeed', 'action=card&operation=set', 'succeed');
  61. }
  62. } elseif($operation == 'manage'){
  63. if(submitcheck('cardsubmit')) {
  64. if(is_array($_POST['delete'])) {
  65. $delnum = C::t('common_card')->delete($_POST['delete']);
  66. $card_info = serialize(array('num' => ($delnum ? $delnum : 0)));
  67. $cardlog = array(
  68. 'uid' => $_G['uid'],
  69. 'cardrule' => '',
  70. 'info' => $card_info,
  71. 'dateline' => $_G['timestamp'],
  72. 'operation' => 3,
  73. 'username' => $_G['member']['username']
  74. );
  75. C::t('common_card_log')->insert($cardlog);
  76. }
  77. }
  78. $sqladd = cardsql();
  79. foreach($_GET AS $key => $val) {
  80. if(strpos($key, 'srch_') !== false && $val) {
  81. if(in_array($key, array('srch_username'))){
  82. $val = rawurlencode($val);
  83. }
  84. $export_url[] = $key.'='.$val;
  85. }
  86. }
  87. $perpage = max(20, empty($_GET['perpage']) ? 20 : intval($_GET['perpage']));
  88. echo '<script type="text/javascript" src="static/js/calendar.js"></script>';
  89. showtips('card_manage_tips');
  90. $card_type_option = '';
  91. foreach(C::t('common_card_type')->range(0, 0, 'ASC') as $result) {
  92. $card_type[$result['id']] = $result;
  93. $card_type_option .= "<option value=\"{$result['id']}\" ".($_GET['srch_card_type'] == $result['id'] ? 'selected' : '').">{$result['typename']}</option>";
  94. }
  95. showformheader('card', '', 'cdform', 'get');
  96. showtableheader();
  97. showtablerow('', array('width="80"', 'width="100"', 'width=100', 'width="260"'),
  98. array(
  99. cplang('card_number'), '<input type="text" name="srch_id" class="txt" value="'.$_GET['srch_id'].'" />',
  100. cplang('card_log_price').cplang('between'), '<input type="text" name="srch_price_min" class="txt" value="'.($_GET['srch_price_min'] ? $_GET['srch_price_min'] : '').'" />- &nbsp;<input type="text" name="srch_price_max" class="txt" value="'.($_GET['srch_price_max'] ? $_GET['srch_price_max'] :'' ).'" />',
  101. )
  102. );
  103. echo "<input type='hidden' name='action' value='card'><input type='hidden' name='operation' value='manage'>";
  104. $extcredits_option = "<option value=''>".cplang('nolimit')."</option>";
  105. foreach($_G['setting']['extcredits'] AS $key => $val) {
  106. $extcredits_option .= "<option value='$key' ".($_GET['srch_extcredits'] == $key ? 'selected' : '').">{$val['title']}</option>";
  107. }
  108. foreach(array('1' => cplang('card_manage_status_1'), '2' => cplang('card_manage_status_2'), '9' => cplang('card_manage_status_9')) AS $key => $val) {
  109. $status_option .= "<option value='{$key}' ".($_GET['srch_card_status'] == $key ? "selected" : '').">{$val}</option>";
  110. }
  111. showtablerow('', array(),
  112. array(
  113. cplang('card_extcreditsval'), '<input type="text" name="srch_extcreditsval" class="txt" style="width:42px;" value="'.$_GET['srch_extcreditsval'].'" /><select name="srch_extcredits">'.$extcredits_option.'</select>',
  114. cplang('card_status'), "<select name='srch_card_status'><option value=''>".cplang('nolimit')."</option>".$status_option."</select>",
  115. )
  116. );
  117. showtablerow('', array(),
  118. array(
  119. cplang('card_log_used_user'), '<input type="text" name="srch_username" class="txt" value="'.$_GET['srch_username'].'" />',
  120. cplang('card_used_dateline'), '<input type="text" name="srch_useddateline_start" class="txt" value="'.$_GET['srch_useddateline_start'].'" onclick="showcalendar(event, this);" />- &nbsp;<input type="text" name="srch_useddateline_end" class="txt" value="'.$_GET['srch_useddateline_end'].'" onclick="showcalendar(event, this)" />',
  121. )
  122. );
  123. $perpage_selected[$perpage] = "selected=selected";
  124. showtablerow('', array(),
  125. array(
  126. cplang('card_type'), '<select name="srch_card_type"><option value="">'.cplang('nolimit').'</option><option value="0" '.($_GET['srch_card_type'] != '' && $_GET['srch_card_type'] == 0 ? 'selected' : '').'>'.cplang('card_type_default').'</option>'.$card_type_option.'</select>',
  127. cplang('card_search_perpage'), '<select name="perpage" class="ps" onchange="this.form.submit();" ><option value="20" '.$perpage_selected[20].'>'.cplang('perpage_20').'</option><option value="50" '.$perpage_selected[50].'>'.cplang('perpage_50').'</option><option value="100" '.$perpage_selected[100].'>'.cplang('perpage_100').'</option></select>',
  128. )
  129. );
  130. showtablerow('', array('width="40"', 'width="100"', 'width=50', 'width="260"'),
  131. array(
  132. '<input type="submit" name="srchbtn" class="btn" value="'.$lang['search'].'" />',''
  133. )
  134. );
  135. showtablefooter();
  136. showformfooter();
  137. showformheader('card&operation=manage&');
  138. showtableheader('card_manage_title');
  139. showsubtitle(array('', cplang('card_number'), cplang('card_log_price'), cplang('card_extcreditsval'), cplang('card_type'), cplang('card_status'), cplang('card_log_used_user'), cplang('card_used_dateline'), cplang('card_make_cleardateline')/*, cplang('card_maketype')*/, cplang('card_maketime'), cplang('card_log_maker')));
  140. $start_limit = ($page - 1) * $perpage;
  141. $export_url[] = 'start='.$start_limit;
  142. foreach ($_GET AS $key => $val) {
  143. if(strpos($key, 'srch_') !== FALSE) {
  144. $url_add .= '&'.$key.'='.$val;
  145. }
  146. }
  147. $url = ADMINSCRIPT.'?action=card&operation=manage&page='.$page.'&perpage='.$perpage.$url_add;
  148. $count = $sqladd ? C::t('common_card')->count_by_where($sqladd) : C::t('common_card')->count();
  149. if($count) {
  150. $multipage = multi($count, $perpage, $page, $url, 0, 3);
  151. foreach(C::t('common_card')->fetch_all_by_where($sqladd, $start_limit, $perpage) as $result) {
  152. $userlist[$result['makeruid']] = $result['makeruid'];
  153. $userlist[$result['uid']] = $result['uid'];
  154. $cardlist[] = $result;
  155. }
  156. if($userlist) {
  157. $members = C::t('common_member')->fetch_all($userlist);
  158. unset($userlist);
  159. }
  160. foreach($cardlist AS $key => $val) {
  161. showtablerow('', array('class="smallefont"', '', '', '', '', '', '', '', '', '', '', ''), array(
  162. '<input class="checkbox" type="checkbox" name="delete[]" value="'.$val[id].'">',
  163. $val['id'],
  164. $val['price'].cplang('card_make_price_unit'),
  165. $val['extcreditsval'].$_G['setting']['extcredits'][$val['extcreditskey']]['title'],
  166. $card_type[$val['typeid']]['typename'] ? $card_type[$val['typeid']]['typename'] : cplang('card_type_default'),
  167. cplang("card_manage_status_".$val['status']),
  168. $val['uid'] ? "<a href='home.php?mod=space&uid={$val[uid]}' target='_blank'>".$members[$val['uid']]['username'] : ' -- ',
  169. $val['useddateline'] ? dgmdate($val['useddateline']) : ' -- ',
  170. $val['cleardateline'] ? dgmdate($val['cleardateline'], 'Y-m-d') : cplang('card_make_cleardateline_none'),
  171. dgmdate($val['dateline'], 'u'),
  172. "<a href='home.php?mod=space&uid={$val['makeruid']}' target='_blank'>".$members[$val['makeruid']]['username']."</a>"
  173. ));
  174. }
  175. echo '<input type="hidden" name="perpage" value="'.$perpage.'">';
  176. showsubmit('cardsubmit', 'submit', 'del', '<a href="'.ADMINSCRIPT.'?action=card&operation=export&'.implode('&', $export_url).'" title="'.$lang['card_export_title'].'">'.$lang['card_export'].'</a>', $multipage, false);
  177. }
  178. showtablefooter();
  179. showformfooter();
  180. } elseif($operation == 'type') {
  181. if(submitcheck('cardsubmit')) {
  182. if(is_array($_POST['delete'])) {
  183. C::t('common_card_type')->delete($_POST['delete']);
  184. C::t('common_card')->update_by_typeid($_POST['delete'], array('typeid'=>1));
  185. }
  186. if(is_array($_POST['newtype'])) {
  187. $_POST['newtype'] = dhtmlspecialchars(daddslashes($_POST['newtype']));
  188. foreach($_POST['newtype'] AS $key => $val) {
  189. if(trim($val)) {
  190. C::t('common_card_type')->insert(array('typename' => trim($val)));
  191. }
  192. }
  193. }
  194. }
  195. showtips('card_type_tips');
  196. showformheader('card&operation=type&');
  197. showtableheader();
  198. showtablerow('class="header"', array('', ''), array(
  199. cplang('delete'),
  200. cplang('card_type'),
  201. ));
  202. showtablerow('', '', array(
  203. '<input class="checkbox" type="checkbox" value ="" disabled="disabled" >',
  204. cplang('card_type_default'),
  205. ));
  206. foreach(C::t('common_card_type')->range(0, 0, 'ASC') as $result) {
  207. showtablerow('', '', array(
  208. '<input class="checkbox" type="checkbox" name ="delete[]" value ="'.$result['id'].'" >',
  209. $result['typename'],
  210. ));
  211. }
  212. echo <<<EOT
  213. <script type="text/JavaScript">
  214. var rowtypedata = [
  215. [[1,''], [1,'<input type="text" class="txt" size="30" name="newtype[]">']],
  216. ];
  217. </script>
  218. EOT;
  219. echo '<tr><td></td><td colspan="2"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['add_new'].'</a></div></td></tr>';
  220. showsubmit('cardsubmit', 'submit', 'select_all');
  221. showtablefooter();
  222. showformfooter();
  223. } elseif($operation == 'make') {
  224. if(!submitcheck('cardsubmit', 1)) {
  225. if($card_log = C::t('common_card_log')->fetch_by_operation(1)) {
  226. $card_log['rule'] = dunserialize($card_log['cardrule']);
  227. }
  228. $card_type[] = array(0, cplang('card_type_default'));
  229. foreach(C::t('common_card_type')->range(0, 0, 'ASC') as $result) {
  230. $card_type[] = array($result['id'], $result['typename']);
  231. }
  232. echo '<script type="text/javascript" src="static/js/calendar.js"></script>';
  233. showformheader('card&operation=make&');
  234. showtips('card_make_tips');
  235. showtableheader();
  236. showsetting('card_make_rule', '', '', '<input type="text" name="rule" class="txt" value="'.($card_log['rule']['rule'] ? $card_log['rule']['rule'] : '').'" onkeyup="javascript:checkcardrule(this);"><br /><span id="cardrule_view" class="tips2" style="display:none;"></span>');
  237. echo <<<EOT
  238. <script type="text/javascript" charset="gbk">
  239. function checkcardrule(obj) {
  240. var chrLength = obj.value.length;
  241. $('cardrule_view').style.display = "";
  242. $('cardrule_view').innerHTML = "{$lang['card_number']}<strong>"+chrLength+"</strong>{$lang['card_number_unit']}";
  243. }
  244. </script>
  245. EOT;
  246. showsetting('card_type', array('typeid', $card_type), $card_log['rule']['typeid'], 'select');
  247. showsetting('card_make_num', 'num', ($card_log['rule']['num'] ? $card_log['rule']['num'] : 1), 'text');
  248. $extcredits_option = '';
  249. foreach($_G['setting']['extcredits'] AS $key => $val) {
  250. $extcredits_option .= "<option value='$key'".($card_log['rule']['extcreditskey'] == $key ? 'selected' : '').">{$val['title']}</option>";
  251. }
  252. showsetting('card_make_extcredits', '', '', '<select name="extcreditskey" style="width:80px;">'.$extcredits_option.'</select><input type="text" name="extcreditsval" value="'.($card_log['rule']['extcreditsval'] ? $card_log['rule']['extcreditsval'] : 1).'" class="txt" style="width:50px;">');
  253. showsetting('card_make_price', 'price', ($card_log['rule']['price'] ? $card_log['rule']['price'] : 0), 'text');
  254. showsetting('card_make_cleardateline', 'cleardateline', date("Y-m-d", $_G['timestamp']+31536000), 'calendar', '', 0, '');
  255. showsetting('card_make_description', 'description', $card_log['description'] , 'text');
  256. showsubmit('cardsubmit');
  257. showtablefooter();
  258. showformfooter();
  259. } else {
  260. $_GET['rule'] = rawurldecode(trim($_GET['rule']));
  261. $_GET['num'] = intval($_GET['num']);
  262. list($y, $m, $d) = explode("-", $_GET['cleardateline']);
  263. $_GET['step'] = $_GET['step'] ? $_GET['step'] : 1;
  264. $cleardateline = $_GET['cleardateline'] && $y && $m ? mktime(23, 59, 59, $m, $d, $y) : 0 ;
  265. if($cleardateline < TIMESTAMP) {
  266. cpmsg('card_make_cleardateline_early', '', 'error');
  267. }
  268. if(!$_GET['rule']) {
  269. cpmsg('card_make_rule_empty', '', 'error');
  270. }
  271. if($_GET['num'] < 1) {
  272. cpmsg('card_make_num_error', '', 'error');
  273. }
  274. include libfile("class/card");
  275. $card = new card();
  276. $checkrule = $card->checkrule($_GET['rule'], 1);
  277. if($checkrule === -2) {
  278. cpmsg('card_make_rule_error', '', 'error');
  279. }
  280. if($_GET['step'] == 1) {
  281. $card_rule = serialize(array('rule' => $_GET['rule'], 'price' => $_GET['price'], 'extcreditskey' => $_GET['extcreditskey'], 'extcreditsval' => $_GET['extcreditsval'], 'num' => $_GET['num'], 'cleardateline' => $cleardateline, 'typeid' => $_GET['typeid']));
  282. $cardlog = array(
  283. 'uid' => $_G['uid'],
  284. 'username' => $_G['member']['username'],
  285. 'cardrule' => $card_rule,
  286. 'dateline' => $_G['timestamp'],
  287. 'description' => $_GET['description'],
  288. 'operation' => 1,
  289. );
  290. $logid = C::t('common_card_log')->insert($cardlog, true);
  291. }
  292. $onepage_make = 500;
  293. $_GET['logid'] = $logid ? $logid : $_GET['logid'];
  294. if($_GET['num'] > $onepage_make) {
  295. $step_num = ceil($_GET['num']/$onepage_make);
  296. if($step_num > 1) {
  297. if($_GET['step'] == $step_num) {
  298. if($_GET['num'] % $onepage_make == 0) {
  299. $makenum = $onepage_make;
  300. } else {
  301. $makenum = $_GET['num'] % $onepage_make;
  302. }
  303. } else {
  304. $makenum = $onepage_make;
  305. $nextstep = $_GET['step'] + 1;
  306. }
  307. }
  308. } else {
  309. $makenum = $_GET['num'];
  310. }
  311. $cardval = array(
  312. 'typeid' => $_GET['typeid'],
  313. 'price' => $_GET['price'],
  314. 'extcreditskey' => $_GET['extcreditskey'],
  315. 'extcreditsval' => $_GET['extcreditsval'],
  316. 'cleardateline' => $cleardateline
  317. );
  318. $card->make($_GET['rule'], $makenum, $cardval);
  319. $_GET['succeed_num'] += $card->succeed;
  320. $_GET['fail_num'] += $card->fail;
  321. if($nextstep) {
  322. $_GET['rule'] = rawurlencode($_GET['rule']);
  323. $nextlink = "action=card&operation=make&rule={$_GET['rule']}&num={$_GET['num']}&price={$_GET['price']}&extcreditskey={$_GET['extcreditskey']}&extcreditsval={$_GET['extcreditsval']}&cleardateline={$_GET['cleardateline']}&step={$nextstep}&succeed_num={$_GET['succeed_num']}&fail_num={$_GET['fail_num']}&typeid={$_GET['typeid']}&logid={$_GET['logid']}&cardsubmit=yes";
  324. cpmsg('card_make_step', $nextlink, 'loading', array('step' => $nextstep - 1, 'step_num' => $step_num, 'succeed_num' => $card->succeed, 'fail_num' => $card->fail));
  325. } else {
  326. $card_info = serialize(array('num' => $_GET['num'], 'succeed_num' => $_GET['succeed_num'], 'fail_num' => $_GET['fail_num']));
  327. C::t('common_card_log')->update($_GET['logid'], array('info'=>$card_info));
  328. if(ceil($_GET['num']*0.6) > $_GET['succeed_num']) {
  329. cpmsg('card_make_rate_succeed', 'action=card&operation=make', 'succeed', array('succeed_num' => $_GET['succeed_num'], 'fail_num' => $_GET['fail_num']));
  330. }
  331. cpmsg('card_make_succeed', 'action=card&operation=manage', 'succeed', array('succeed_num' => $_GET['succeed_num'], 'fail_num' => $_GET['fail_num']));
  332. }
  333. }
  334. } elseif($operation == 'log'){
  335. showformheader('card&operation=log&');
  336. showtableheader();
  337. $perpage = max(20, empty($_GET['perpage']) ? 20 : intval($_GET['perpage']));
  338. $start_limit = ($page - 1) * $perpage;
  339. $do = in_array($_GET['do'], array('add', 'task', 'del', 'cron')) ? $_GET['do'] : 'add';
  340. $operation = 0;
  341. switch($do) {
  342. case 'add':
  343. $operation = 1;
  344. break;
  345. case 'task':
  346. $operation = 2;
  347. break;
  348. case 'del':
  349. $operation = 3;
  350. break;
  351. case 'cron':
  352. $operation = 9;
  353. break;
  354. }
  355. if($do == 'add' || $do == 'task') {
  356. $showtabletitle = array(
  357. cplang('time'),
  358. cplang('card_log_operation'),
  359. cplang('card_log_user'),
  360. cplang('card_log_rule'),
  361. cplang('card_log_add_info'),
  362. cplang('card_log_description')
  363. );
  364. } elseif($do == 'del') {
  365. $showtabletitle = array(
  366. cplang('time'),
  367. cplang('card_log_operation'),
  368. cplang('card_log_user'),
  369. cplang('card_log_del_info')
  370. );
  371. } elseif($do == 'cron') {
  372. $showtabletitle = array(
  373. cplang('time'),
  374. cplang('card_log_operation'),
  375. cplang('card_log_cron_info')
  376. );
  377. }
  378. showtablerow('class="header"', array('class="td21"','class="td23"','class="td23"','class="td21"','class="td23"'), $showtabletitle);
  379. $count = C::t('common_card_log')->count_by_operation($operation);
  380. if($count) {
  381. $url = ADMINSCRIPT."?action=card&operation=log&do=".$do."&page=".$page.'&perpage='.$perpage;
  382. $multipage = multi($count, $perpage, $page, $url, 0, 3);
  383. foreach(C::t('common_card_log')->fetch_all_by_operation($operation, $start_limit, $perpage) as $result) {
  384. $result['info_arr'] = dunserialize($result['info']);
  385. if($result['operation'] == 1 || $result['operation'] == 2) {
  386. $result['cardrule_arr'] = dunserialize($result['cardrule']);
  387. $showrule = array(
  388. $result['cardrule_arr']['rule'],
  389. cplang('card_log_price').' : '.$result['cardrule_arr']['price'].cplang('card_make_price_unit'),
  390. cplang('card_log_make_num').' : '.$result['cardrule_arr']['num'],
  391. cplang('card_extcreditsval').' : '.$result['cardrule_arr']['extcreditsval'].$_G['setting']['extcredits'][$result['cardrule_arr']['extcreditskey']]['title'],
  392. cplang('card_make_cleardateline').' : '.($result['cardrule_arr']['cleardateline'] ? dgmdate($result['cardrule_arr']['cleardateline'], 'Y-m-d H:i') : cplang('card_make_cleardateline_none')),
  393. );
  394. $showinfo = array(
  395. cplang('succeed_num').' : '.$result['info_arr']['succeed_num'],
  396. cplang('fail_num').' : '.$result['info_arr']['fail_num']
  397. );
  398. $showtablerow = array(
  399. dgmdate($result['dateline']),
  400. $result['operation'] == 1 ? cplang('card_log_operation_add') : cplang('card_log_operation_task'),
  401. $result['username'],
  402. implode("<br />", $showrule),
  403. implode("<br />", $showinfo),
  404. $result['description']
  405. );
  406. } elseif ($result['operation'] == 3 || $result['operation'] == 9) {
  407. $showinfo =array(
  408. cplang('card_log_num').$result['info_arr']['num'],
  409. );
  410. $showtablerow = $result['operation'] == 3 ? array(
  411. dgmdate($result['dateline']),
  412. cplang('card_log_operation_del'),
  413. $result['username'],
  414. implode("<br />", $showinfo),
  415. ) : array(
  416. dgmdate($result['dateline']),
  417. cplang('card_log_operation_cron'),
  418. implode("<br />", $showinfo),
  419. );
  420. }
  421. showtablerow('', array('class="smallefont"'), $showtablerow);
  422. }
  423. } else {
  424. }
  425. showsubmit('', '', '', '', $multipage);
  426. showtablefooter();
  427. showformfooter();
  428. } elseif ($operation == 'export'){
  429. $sqladd = cardsql();
  430. $_GET['start'] = intval($_GET['start']);
  431. $count = $sqladd ? C::t('common_card')->count_by_where($sqladd) : C::t('common_card')->count();
  432. if($count) {
  433. $cardtype = C::t('common_card_type')->range();
  434. $count = min(10000, $count);
  435. foreach(C::t('common_card')->fetch_all_by_where($sqladd, $_GET['start'], $count) as $result) {
  436. $userlist[$result['uid']] = $result['uid'];
  437. $userlist[$result['makeruid']] = $result['makeruid'];
  438. $result['extcreditsval'] = $result['extcreditsval'].$_G['setting']['extcredits'][$result['extcreditskey']]['title'];
  439. unset($result['extcreditskey']);
  440. unset($result['maketype']);
  441. $cardlist[] = $result;
  442. }
  443. if($userlist) {
  444. $members = C::t('common_member')->fetch_all($userlist);
  445. unset($userlist);
  446. }
  447. foreach($cardlist AS $key => $val) {
  448. foreach($val as $skey => $sval) {
  449. $sval = preg_replace('/\s+/', ' ', $sval);
  450. if($skey == 'id' && !$title['id']) { $title['id'] = cplang('card_number'); }
  451. if($skey == 'typeid') {
  452. if(!$title['typeid']) {
  453. $title['typeid'] = cplang("card_type");
  454. }
  455. $sval = $sval != 0 ? $cardtype[$sval]['typename'] : cplang('card_type_default');
  456. }
  457. if(in_array($skey, array('uid', 'makeruid'))) {
  458. if($skey == 'makeruid' && !$title['makeruid']) {
  459. $title['makeruid'] = cplang("card_log_maker");
  460. }
  461. if($skey == 'uid' && !$title['uid']) {
  462. $title['uid'] = cplang("card_log_used_user");
  463. }
  464. $sval = $members[$sval]['username'];
  465. }
  466. if($skey == 'price') {
  467. if(!$title['price']) {
  468. $title['price'] = cplang('card_log_price');
  469. }
  470. $sval = $sval.cplang("card_make_price_unit");
  471. }
  472. if($skey == 'extcreditsval') {
  473. if(!$title['extcreditsval']) {
  474. $title['extcreditsval'] = cplang('card_extcreditsval');
  475. }
  476. }
  477. if($skey == 'status') {
  478. if(!$title['status']) {
  479. $title['status'] = cplang('card_status');
  480. }
  481. $sval = cplang("card_manage_status_".$sval);
  482. }
  483. if(in_array($skey, array('dateline', 'cleardateline', 'useddateline'))) {
  484. if($skey == 'dateline' && !$title['dateline']) {
  485. $title['dateline'] = cplang('card_maketime');
  486. }
  487. if($skey == 'cleardateline' && !$title['cleardateline']) {
  488. $title['cleardateline'] = cplang('card_make_cleardateline');
  489. }
  490. if($skey == 'useddateline' && !$title['useddateline']) {
  491. $title['useddateline'] = cplang('card_used_dateline');
  492. }
  493. $sval = $sval ? date("Y-m-d", $sval) : '';
  494. }
  495. $detail .= strlen($sval) > 11 && is_numeric($sval) ? '['.$sval.'],' : $sval.',';
  496. }
  497. $detail = $detail."\n";
  498. }
  499. }
  500. $detail = implode(',', $title)."\n".$detail;
  501. $filename = 'card_'.date('Ymd', TIMESTAMP).'.csv';
  502. ob_end_clean();
  503. header('Content-Encoding: none');
  504. header('Content-Type: application/octet-stream');
  505. header('Content-Disposition: attachment; filename='.$filename);
  506. header('Pragma: no-cache');
  507. header('Expires: 0');
  508. if($_G['charset'] != 'gbk') {
  509. $detail = diconv($detail, $_G['charset'], 'GBK');
  510. }
  511. echo $detail;
  512. exit();
  513. } else {
  514. cpmsg('action_noaccess', '', 'error');
  515. }
  516. function cardsql() {
  517. $_GET = daddslashes($_GET);
  518. $_GET['srch_id'] = trim($_GET['srch_id']);
  519. $_GET['srch_price_max'] = intval($_GET['srch_price_max']);
  520. $_GET['srch_price_min'] = intval($_GET['srch_price_min']);
  521. $_GET['srch_useddateline'] = trim($_GET['srch_useddateline']);
  522. $_GET['srch_username'] = trim($_GET['srch_username']);
  523. $_GET['srch_extcredits'] = trim($_GET['srch_extcredits']);
  524. $_GET['srch_extcreditsval'] = intval($_GET['srch_extcreditsval']) > 0 ? intval($_GET['srch_extcreditsval']) : '' ;
  525. $_GET['srch_username'] = trim($_GET['srch_username']);
  526. $_GET['srch_useddateline_start'] = trim($_GET['srch_useddateline_start']);
  527. $_GET['srch_useddateline_end'] = trim($_GET['srch_useddateline_end']);
  528. $sqladd = '';
  529. if($_GET['srch_id']) {
  530. $sqladd .= " AND id LIKE '%{$_GET['srch_id']}%' ";
  531. }
  532. if($_GET['srch_card_type'] != '') {
  533. $sqladd .= " AND typeid = '{$_GET['srch_card_type']}'";
  534. }
  535. if($_GET['srch_price_min'] && !$_GET['srch_price_max']) {
  536. $sqladd .= " AND price = '{$_GET['srch_price_min']}'";
  537. } elseif($_GET['srch_price_max'] && !$_GET['srch_price_min']) {
  538. $sqladd .= " AND price = '{$_GET['srch_price_max']}'";
  539. } elseif($_GET['srch_price_min'] && $_GET['srch_price_max']) {
  540. $sqladd .= " AND price between '{$_GET['srch_price_min']}' AND '{$_GET['srch_price_max']}'";
  541. }
  542. if($_GET['srch_extcredits']) {
  543. $sqladd .= " AND extcreditskey = '{$_GET['srch_extcredits']}'";
  544. }
  545. if($_GET['srch_extcreditsval']) {
  546. $sqladd .= " AND extcreditsval = '{$_GET['srch_extcreditsval']}'";
  547. }
  548. if($_GET['srch_username']) {
  549. $uid = ($uid = C::t('common_member')->fetch_uid_by_username($_GET['srch_username'])) ? $uid : C::t('common_member_archive')->fetch_uid_by_username($_GET['srch_username']);
  550. $sqladd .= " AND uid = '{$uid}'";
  551. }
  552. if($_GET['srch_card_status']) {
  553. $sqladd .= " AND status = '{$_GET['srch_card_status']}'";
  554. }
  555. if($_GET['srch_useddateline_start'] || $_GET['srch_useddateline_end']) {
  556. if($_GET['srch_useddateline_start']) {
  557. list($y, $m, $d) = explode("-", $_GET['srch_useddateline_start']);
  558. $sqladd .= " AND useddateline >= '".mktime('0', '0', '0', $m, $d, $y)."' ";
  559. }
  560. if($_GET['srch_useddateline_end']) {
  561. list($y, $m, $d) = explode("-", $_GET['srch_useddateline_end']);
  562. $sqladd .= " AND useddateline <= '".mktime('23', '59', '59', $m, $d, $y)."' AND useddateline <> 0 ";
  563. }
  564. }
  565. return $sqladd ? ' 1 '.$sqladd : '';
  566. }
  567. ?>