admincp_membersplit.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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_membersplit.php 29851 2012-05-02 02:18:40Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. cpheader();
  12. if(!$operation) {
  13. $operation = 'check';
  14. }
  15. loadcache(array('membersplitdata', 'userstats'));
  16. if(!empty($_G['cache']['membersplitstep'])) {
  17. cpmsg('membersplit_split_in_backstage', 'action=membersplit&operation=check', 'loadingform');
  18. }
  19. if($operation == 'check') {
  20. shownav('founder', 'nav_membersplit');
  21. showsubmenu('membersplit');
  22. showtips('membersplit_check_tips');
  23. showformheader('membersplit&operation=manage');
  24. showtableheader('membersplit_table_orig');
  25. $membercount = $_G['cache']['userstats']['totalmembers'];
  26. showsubtitle(array('','','membersplit_count', 'membersplit_lasttime_check'));
  27. if($membercount < 20000) {
  28. $color = 'green';
  29. $msg = $lang['membersplit_without_optimization'];
  30. } else {
  31. $color = empty($_G['cache']['membersplitdata']) || $_G['cache']['membersplitdata']['dateline'] < TIMESTAMP - 86400*10 ?
  32. 'red' : 'green';
  33. $msg = empty($_G['cache']['membersplitdata']) ? $lang['membersplit_has_no_check'] : dgmdate($_G['cache']['membersplitdata']['dateline']);
  34. }
  35. showtablerow('', '', array('','', number_format($membercount), '<span style="color:'.$color.'">'.$msg.'</span>'));
  36. if($membercount >= 20000) {
  37. showsubmit('membersplit_check_submit', 'membersplit_check');
  38. }
  39. showtablefooter();
  40. showformfooter();
  41. } else if($operation == 'manage') {
  42. shownav('founder', 'nav_membersplit');
  43. if(!submitcheck('membersplit_split_submit', 1)) {
  44. showsubmenu('membersplit');
  45. showtips('membersplit_tips');
  46. showformheader('membersplit&operation=manage');
  47. showtableheader('membersplit_table_orig');
  48. if($_G['cache']['membersplitdata'] && $_G['cache']['membersplitdata']['dateline'] > TIMESTAMP - 86400) {
  49. $zombiecount = $_G['cache']['membersplitdata']['zombiecount'];
  50. } else {
  51. $zombiecount = C::t('common_member')->count_zombie();
  52. savecache('membersplitdata', array('zombiecount' => $zombiecount, 'dateline' => TIMESTAMP));
  53. }
  54. $membercount = $_G['cache']['userstats']['totalmembers'];
  55. $percentage = round($zombiecount/$membercount, 4)*100;
  56. showsubtitle(array('','','membersplit_count', 'membersplit_combie_count', 'membersplit_splitnum'));
  57. $color = $percentage > 0 ? 'red' : 'green';
  58. if($percentage == 0) {
  59. $msg = $lang['membersplit_message0'];
  60. } else if($percentage < 10) {
  61. $msg = $lang['membersplit_message10'];
  62. } else {
  63. $msg = $lang['membersplit_message100'];
  64. }
  65. showtablerow('', '',
  66. array('','', number_format($membercount), '<span style="color:'.$color.'">'.number_format($zombiecount).'('.$percentage.'%) '.$msg.'</span>', '<input name="splitnum" value="200" type="text" class="txt"/>'));
  67. if($percentage > 0) {
  68. showsubmit('membersplit_split_submit', 'membersplit_archive');
  69. }
  70. showtablefooter();
  71. showformfooter();
  72. } else {
  73. $step = intval($_GET['step'])+1;
  74. $splitnum = max(10, intval($_GET['splitnum']));
  75. if(!$_GET['nocheck'] && $step == 1 && !C::t('common_member_archive')->check_table()) {
  76. cpmsg('membersplit_split_check_table', 'action=membersplit&operation=rebuildtable&splitnum='.$splitnum, 'loadingform', array());
  77. cpmsg('', 'action=membersplit&operation=manage', 'error');
  78. }
  79. if(!C::t('common_member')->split($splitnum)) {
  80. cpmsg('membersplit_split_succeed', 'action=membersplit&operation=manage', 'succeed');
  81. }
  82. cpmsg('membersplit_split_doing', 'action=membersplit&operation=manage&membersplit_split_submit=1&step='.$step.'&splitnum='.$splitnum, 'loadingform', array('num' => $step*$splitnum));
  83. }
  84. } else if($operation == 'rebuildtable') {
  85. $step = intval($_GET['step']);
  86. $splitnum = max(10, intval($_GET['splitnum']));
  87. $ret = C::t('common_member_archive')->rebuild_table($step);
  88. if($ret === false) {
  89. cpmsg('membersplit_split_check_table_done', 'action=membersplit&operation=manage&membersplit_split_submit=1&nocheck=1&splitnum='.$splitnum, 'loadingform');
  90. } else if($ret === true) {
  91. cpmsg('membersplit_split_checking_table', 'action=membersplit&operation=rebuildtable&splitnum='.$splitnum.'&step='.($step+1), 'loadingform', array('step' => $step+1));
  92. } else {
  93. cpmsg('membersplit_split_check_table_fail', 'action=membersplit&operation=manage&splitnum='.$splitnum, 'error', array('tablename' => $ret));
  94. }
  95. }
  96. ?>