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

/trunk/zjcp/cp_man.php

https://gitlab.com/BGCX261/zjrenju-svn-to-git
PHP | 457 lines | 353 code | 66 blank | 38 comment | 57 complexity | 2c30f42026e01c4a0fb7becd0fae11f3 MD5 | raw file
  1. <?php
  2. if (!defined('RBB_ADMINCP')) die('Fatal error.');
  3. if(!isset($action)) $action='list';
  4. if(!in_array($action,array('list','show','update','new1','new2','del','makepage')))
  5. ACP_MessageBox($str['act_err']);
  6. switch($action)
  7. {
  8. case 'list':
  9. SetNoUseCache();
  10. if( !isset($page) ) $page = 1;
  11. $page=intval( $page );
  12. $sql = "SELECT COUNT(*) FROM `$cfg[tb_competitions]`";
  13. $result = RenDB_Query($sql);
  14. $row = RenDB_Fetch_Row( $result );
  15. $pageinfo = MakePageBar( "index.php?mode=cp_man&action=list", $row[0], $cfg['gperpage'], $page );
  16. $sql="SELECT * FROM `$cfg[tb_competitions]` ORDER BY cp_id DESC LIMIT {$pageinfo['start']},{$cfg['gperpage']}";
  17. $result = RenDB_Query($sql);
  18. $cplist='';
  19. if( RenDB_Num_Rows($result) > 0 )
  20. {
  21. while($cpdata=RenDB_Fetch_Array( $result ) )
  22. {
  23. $cplist.="<tr bgcolor=\"$color[cell]\"><td>";
  24. $cplist.="[<a href=\"JavaScript:ConfirmDelCP('$cpdata[cp_id]')\">".HLTxt('删')."</a>] ";
  25. $cplist.="<a href=\"index.php?mode=cp_man&action=show&cp_id=$cpdata[cp_id]\">$cpdata[cp_id]: $cpdata[cp_name]</a> <br />时间: ";
  26. //$cplist.='<hr />';
  27. //$cplist.=$cpdata['description'];
  28. $cplist.=TimeToDate($cpdata['starttime']);
  29. if($cpdata['endtime'])
  30. $cplist.=' - '.TimeToDate($cpdata['endtime']);
  31. //if(!file_exists("../cpdata/$cpdata[cp_id].html"))
  32. // $cplist.=' (没有报表)';
  33. //else $cplist.=" [<a target=\"_blank\" href=\"../cpdata/$cpdata[cp_id].html\">查看报表</a>]";
  34. $cplist.=" [<a href=\"index.php?mode=cp_man&action=makepage&cp_id=$cpdata[cp_id]\">生成(刷新)报表</a>]";
  35. $cplist.="</td></tr>";
  36. }
  37. }
  38. else $cplist = "<tr bgcolor=\"$color[cell]\"><td>(空)</td></tr>";
  39. ACP_ShowHeader('比赛设置');
  40. eval ('echo "'.LoadTemplate('cp_man').'";');
  41. ACP_ShowFooter();
  42. break;
  43. case 'show':
  44. if(!isset($cp_id))
  45. ACP_MessageBox($str['act_err']);
  46. $cp_id=intval($cp_id);
  47. $sql ="SELECT * FROM `$cfg[tb_competitions]` WHERE cp_id='$cp_id' LIMIT 1";
  48. $result = RenDB_Query($sql);
  49. if( RenDB_Num_Rows($result) != 1 )
  50. ACP_MessageBox('比赛不存在');
  51. $cpdata=RenDB_Fetch_Array($result);
  52. //$cpsta_sel=array('','','');
  53. //$cpsta_sel[$cpdata['cp_status']]='checked';
  54. $str_enddate=$cpdata['endtime']?date('H:i:s m/d/Y',$cpdata['endtime']):'';
  55. ACP_ShowHeader('比赛管理');
  56. eval ('echo "'.LoadTemplate('cp_man_1').'";');
  57. ACP_ShowFooter();
  58. break;
  59. case 'update':
  60. SetNoUseCache();
  61. if(!isset($cp_id,$cp_name,$description,$enddate))
  62. ACP_MessageBox($str['act_err']);
  63. $cp_id = intval( $cp_id );
  64. if($enddate=='')$enddate=0;
  65. else
  66. {
  67. if(($enddate=strtotime($enddate))===-1)
  68. ACP_MessageBox('时间不正确');
  69. }
  70. //if($cp_status<0||$cp_status>2)$cp_status=0;
  71. require_once('../include/txt_func.php');
  72. $description=CSubStr($description,0,65533);
  73. $cp_name=CSubStr($cp_name,0,253);
  74. $sql ="UPDATE `$cfg[tb_competitions]` SET ";
  75. $sql.="cp_name='$cp_name', ";
  76. $sql.="description='$description', ";
  77. $sql.="endtime='$enddate' ";
  78. $sql.="WHERE cp_id='$cp_id' LIMIT 1";
  79. $result = RenDB_Query($sql);
  80. if( !RenDB_Affected_Rows())
  81. ACP_MessageBox('更改失败,可能是数据并没有改变');
  82. ACP_WriteLog("更改比赛 ID:$cp_id");
  83. Header("Location: index.php?mode=cp_man");
  84. exit();
  85. break;
  86. case 'del':
  87. if(!isset($cp_id))
  88. ACP_MessageBox($str['act_err']);
  89. $cp_id=intval($cp_id);
  90. $sql="DELETE FROM `$cfg[tb_competitions]` WHERE cp_id='$cp_id'";
  91. RenDB_Query($sql,true);
  92. $sql="DELETE FROM `$cfg[tb_groups]` WHERE cp_id='$cp_id'";
  93. RenDB_Query($sql,true);
  94. $sql="DELETE FROM `$cfg[tb_players]` WHERE cp_id='$cp_id'";
  95. RenDB_Query($sql,true);
  96. $sql="DELETE FROM `$cfg[tb_games]` WHERE cp_id='$cp_id' AND mcount=0";
  97. RenDB_Query($sql,true);
  98. $sql="UPDATE `$cfg[tb_games]` SET cp_id=0,group_id=0 WHERE cp_id='$cp_id'";
  99. RenDB_Query($sql,true);
  100. ACP_WriteLog("删除比赛 ID:$cp_id");
  101. Header("Location: index.php?mode=cp_man");
  102. exit();
  103. break;
  104. /*case 'add':
  105. $sql="INSERT INTO `$cfg[tb_competitions]` SET cp_name='(新的比赛)' ";
  106. $result = RenDB_Query($sql);
  107. if( RenDB_Insert_id())
  108. {
  109. ACP_WriteLog("添加比赛 ID:".RenDB_Insert_id());
  110. Header("Location: index.php?mode=cp_man");
  111. exit();
  112. }
  113. ACP_MessageBox('添加失败');
  114. break;
  115. */
  116. case 'new1':
  117. $str_nowtime=date('H:i:s m/d/Y',$nowtime);
  118. ACP_ShowHeader('新建比赛');
  119. eval ('echo "'.LoadTemplate('cp_form').'";');
  120. ACP_ShowFooter();
  121. break;
  122. case 'new2':
  123. if(!isset($cp_name,$description,$group_player,$timestep,$timeadd,$startdate,$rules))
  124. ACP_MessageBox($str['act_err']);
  125. $rules = intval( $rules );
  126. if( $rules < 0 || $rules > 2 ) ACP_MessageBox('规则不正确');
  127. if( $timestep<0 ) $timestep = 0;
  128. if( ($timestep > 21600 || $timestep < 1440) && $timestep!=0)
  129. ACP_MessageBox('每步限时应该在1天-15天之间');
  130. if($timeadd > 525600 || $timeadd< 10 )
  131. ACP_MessageBox('总限时应该在10分钟-365天之间');
  132. if($timestep>$timeadd)$timestep=$timeadd;
  133. $timeadd *= 60;
  134. $timestep *= 60;
  135. $startdate=strtotime($startdate);
  136. if($startdate<$nowtime)
  137. ACP_MessageBox('开始时间不能早于现在');
  138. require_once('../include/txt_func.php');
  139. $description=CSubStr($description,0,65533);
  140. $cp_name=CSubStr($cp_name,0,253);
  141. $group_player=str_replace("\r\n","\n",$group_player);
  142. $group_player=explode("\n\n",$group_player);
  143. require_once('../include/m_func.php');
  144. $players=array();
  145. foreach($group_player as $k=>$v)
  146. {
  147. $v=explode("\n",$v);
  148. foreach($v as $k1=>$v1)
  149. {
  150. $v1=trim($v1);
  151. $v[$k1]=$v1;
  152. if($v1=='')unset($v[$k1]);
  153. elseif(!IsMember($v1)) ACP_MessageBox("{$v1}不是注册用户");
  154. }
  155. if(count($v)==0) continue;
  156. if(count($v)<2) ACP_MessageBox(chr(65+$k).'组人数不够');
  157. $players[]=$v;
  158. }
  159. if(count($players)==0)
  160. ACP_MessageBox("没有选手?");
  161. $allplayer=array();
  162. foreach($players AS $v)
  163. foreach($v AS $v1)
  164. $allplayer[]=$v1;
  165. foreach($allplayer AS $k=>$v)
  166. foreach($allplayer AS $k1=>$v1)
  167. if(IsSameName($v1,$v) && $k!=$k1)
  168. ACP_MessageBox("名单重复: $v");
  169. /*
  170. echo('<pre>');
  171. print_r($allplayer);
  172. echo('</pre>');
  173. die();
  174. */
  175. //创建比赛
  176. $sql="INSERT INTO `$cfg[tb_competitions]` SET cp_name='$cp_name',description='$description',starttime='$startdate' ";
  177. RenDB_Query($sql);
  178. if( !($cp_id=RenDB_Insert_id())) ACP_MessageBox('创建比赛失败');
  179. $ptse=count($allplayer)-1;
  180. $ptsm=$ptse*2;
  181. foreach($players as $k=>$v)
  182. {
  183. //创建组
  184. $sql="INSERT INTO `$cfg[tb_groups]` SET cp_id='$cp_id' ";
  185. RenDB_Query($sql);
  186. if( !($group_id=RenDB_Insert_id()))
  187. ACP_MessageBox('创建分组失败');
  188. foreach($v as $v1)
  189. {
  190. //创建选手
  191. $sql="INSERT INTO `$cfg[tb_players]` SET cp_id='$cp_id', group_id='$group_id',u_name='$v1',ptsm='$ptsm',ptse='$ptse'";
  192. RenDB_Query($sql);
  193. if( !($player_id=RenDB_Insert_id()))
  194. ACP_MessageBox('创建选手失败');
  195. foreach($v as $v2)
  196. {
  197. if(IsSameName($v2,$v1)) continue;
  198. //创建对称的两盘棋
  199. $sql ="INSERT INTO `$cfg[tb_games]` SET cp_id='$cp_id', group_id='$group_id',rules='$rules', b_name='$v1', w_name='$v2', b_time='$timeadd', w_time='$timeadd', l_time='$startdate', step_time='$timestep', add_time='$timeadd', startdate='$startdate', turn_name='$v1' ";
  200. RenDB_Query($sql);
  201. if( !($gid=RenDB_Insert_id()))
  202. ACP_MessageBox('创建棋局失败');
  203. }
  204. }
  205. }
  206. Header("Location: index.php?mode=cp_man");
  207. exit();
  208. case 'makepage':
  209. if(!isset($cp_id))ACP_MessageBox($str['act_err']);
  210. $cp_id=intval($cp_id);
  211. $sql ="SELECT * FROM `$cfg[tb_competitions]` WHERE cp_id='$cp_id' LIMIT 1";
  212. $result = RenDB_Query($sql);
  213. if( RenDB_Num_Rows($result) != 1 )
  214. ACP_MessageBox('比赛不存在');
  215. $cpdata=RenDB_Fetch_Array($result);
  216. //eval ('$buf= "'.LoadTemplate('cp_page_head').'";');
  217. $sql="SELECT gid FROM `$cfg[tb_games]` WHERE cp_id='$cp_id' AND status=0 LIMIT 1";
  218. $result3=RenDB_Query($sql);
  219. if(RenDB_Num_Rows($result3))
  220. $str_status='ongoing';
  221. else
  222. {
  223. $str_status='finished';
  224. if(!$cpdata['endtime'])
  225. {
  226. $sql="UPDATE `$cfg[tb_competitions]` SET endtime='$nowtime' WHERE cp_id='$cp_id' ";
  227. RenDB_Query($sql,true);
  228. }
  229. }
  230. $sql="SELECT COUNT(*) FROM `$cfg[tb_games]` WHERE cp_id='$cp_id'";
  231. $result3=RenDB_Query($sql);
  232. $row=RenDB_Fetch_Row($result3);
  233. $total=$row[0];
  234. $sql="SELECT COUNT(*) FROM `$cfg[tb_games]` WHERE cp_id='$cp_id' AND status=0";
  235. $result3=RenDB_Query($sql);
  236. $row=RenDB_Fetch_Row($result3);
  237. $finished=$total-$row[0];
  238. $buf='<table style="word-wrap: break-word" width="100%" border="0" cellpadding="4"><tr><td>';
  239. $buf.="<h2>$cpdata[cp_name]</h2>";
  240. $buf.="<h5>".TimeToDate($cpdata['starttime']);
  241. if($cpdata['endtime'])
  242. $buf.=' - '.TimeToDate($cpdata['endtime']);
  243. $buf.="</h5>";
  244. $buf.="<h5>Totally $total games, $finished finished. [<a href=\"g_search.php?&action=list&cp_id=$cp_id\">view</a>] [<a href=\"g_search.php?&action=list&cp_id=$cp_id&packdown=1\">download</a>] </h5>";
  245. $buf.='<h5>Last update: '.TimeToDate($nowtime,true).'</h5>';
  246. $buf.=$cpdata['description'];
  247. $sql ="SELECT * FROM `$cfg[tb_groups]` WHERE cp_id='$cp_id' ORDER BY group_id";
  248. $result=RenDB_Query($sql);
  249. $num=0;
  250. while($gpdata=RenDB_Fetch_Array($result))
  251. {
  252. $sql="SELECT * FROM `$cfg[tb_players]` WHERE group_id='$gpdata[group_id]' ORDER BY player_id";
  253. $result1=RenDB_Query($sql);
  254. $players=array();
  255. while($row=RenDB_Fetch_Array($result1))
  256. $players[]=$row;
  257. //判断是否结束
  258. $sql="SELECT gid FROM `$cfg[tb_games]` WHERE group_id='$gpdata[group_id]' AND status=0 LIMIT 1";
  259. $result3=RenDB_Query($sql);
  260. if(RenDB_Num_Rows($result3))
  261. $str_status='ongoing';
  262. else $str_status='finished';
  263. $sql="SELECT COUNT(*) FROM `$cfg[tb_games]` WHERE group_id='$gpdata[group_id]'";
  264. $result3=RenDB_Query($sql);
  265. $row=RenDB_Fetch_Row($result3);
  266. $total=$row[0];
  267. $sql="SELECT COUNT(*) FROM `$cfg[tb_games]` WHERE group_id='$gpdata[group_id]' AND status=0";
  268. $result3=RenDB_Query($sql);
  269. $row=RenDB_Fetch_Row($result3);
  270. $finished=$total-$row[0];
  271. $buf.='<hr width="0" /><table width="100%" border="0"><tr><td>';
  272. $buf.='<b>Group '.chr(65+$num)." ($str_status)</b>";
  273. $buf.="</td><td align=\"right\">$finished/$total finished.[<a href=\"g_search.php?&action=list&group_id=$gpdata[group_id]\">view</a>] [<a href=\"g_search.php?&action=list&group_id=$gpdata[group_id]&packdown=1\">download</a>]</td></tr></table>";
  274. //生成表格
  275. $buf.="<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"4\" bordercolor=\"$color[border]\">";
  276. //表头
  277. $buf.='<tr align="center"><td width="30">No</td><td>Name</td>';
  278. foreach($players as $k=>$v)
  279. {
  280. $uid=$k+1;
  281. $buf.="<td>$uid</td>";
  282. }
  283. $buf.="<td width=\"30\"><a href=\"group_view.php?group_id=$gpdata[group_id]&orderby=0\">Pts</a></td>";
  284. $buf.="<td width=\"30\"><a href=\"group_view.php?group_id=$gpdata[group_id]&orderby=1\">Berg</a></td>";
  285. $buf.="<td width=\"30\"><a href=\"group_view.php?group_id=$gpdata[group_id]&orderby=2\">PtsM</a></td>";
  286. $buf.="<td width=\"30\"><a href=\"group_view.php?group_id=$gpdata[group_id]&orderby=3\">PtsE</a></td>";
  287. $buf.="<td width=\"30\">Pl</td>";
  288. $buf.="</tr>";
  289. foreach($players as $k=>$v)
  290. {
  291. $uid=$k+1;
  292. $g_w=0;
  293. $g_d=0;
  294. $g_l=0;
  295. $pts=0;
  296. $berg=0;
  297. $ptsm=$v['points'];
  298. $ptse=$v['points'];
  299. $pl=1;
  300. $buf.="<tr align=\"center\"><td>$uid</td>";
  301. $buf.='<td>'.MemberLink($v['u_name']).'</td>';
  302. foreach($players as $k1=>$v1)
  303. {
  304. if($v==$v1) $buf.="<td>-</td>";
  305. else
  306. {
  307. if($v1['points']>$v['points'])$pl++;
  308. $sql="SELECT * FROM `$cfg[tb_games]` WHERE group_id='$gpdata[group_id]' AND (w_name='$v[u_name]' AND b_name='$v1[u_name]' OR b_name='$v[u_name]' AND w_name='$v1[u_name]') ORDER BY gid LIMIT 2";
  309. $result3=RenDB_Query($sql);
  310. $points=0;
  311. $games='';
  312. while($gdata=RenDB_Fetch_Array($result3))
  313. {
  314. $uid1=$k1+1;
  315. if($gdata['status'])
  316. {
  317. $isblack=IsSameName($gdata['b_name'],$v['u_name']);
  318. switch($gdata['status'])
  319. {
  320. case 2:
  321. $berg+=$v1['points']/2;
  322. $points+=0.5;
  323. $uid1=HLTxt($uid1,1);
  324. $g_d++;
  325. break;
  326. case 3:
  327. case 5:
  328. case 7:
  329. if($isblack)
  330. {
  331. $berg+=$v1['points'];
  332. $points+=1;
  333. $uid1=HLTxt($uid1);
  334. $g_w++;
  335. }
  336. else $g_l++;
  337. break;
  338. case 1:
  339. case 4:
  340. case 6:
  341. case 8:
  342. if(!$isblack)
  343. {
  344. $berg+=$v1['points'];
  345. $points+=1;
  346. $uid1=HLTxt($uid1);
  347. $g_w++;
  348. }
  349. else $g_l++;
  350. break;
  351. }
  352. $uid1='<b>'.$uid1.'</b>';
  353. }
  354. else
  355. {
  356. $ptsm+=1;
  357. $ptse+=0.5;
  358. }
  359. //if($games!='')$games.='|';
  360. $games.="<br /><a href=\"g_view.php?gid=$gdata[gid]\">($uid1)</a>";
  361. }
  362. $pts+=$points;
  363. if($points!=0)$points="<b>$points</b>";
  364. $buf.="<td>$points$games</td>";
  365. }
  366. }
  367. //if($v['berg']!=$berg)//更新berg
  368. //{
  369. $sql="UPDATE `$cfg[tb_players]` SET g_w='$g_w',g_d='$g_d',g_l='$g_l',points='$pts', berg='$berg',ptsm='$ptsm',ptse='$ptse' WHERE group_id='$gpdata[group_id]' AND u_name='$v[u_name]' LIMIT 1";
  370. RenDB_Query($sql,true);
  371. //}
  372. $berg=sprintf('%2.1f',$berg);
  373. $ptsm=sprintf('%2.1f',$ptsm);
  374. $ptse=sprintf('%2.1f',$ptse);
  375. $buf.="<td>$pts</td><td>$berg</td><td>$ptsm</td><td>$ptse</td><td>$pl</td>";
  376. $buf.='</tr>';
  377. }
  378. $buf.='</table>';
  379. $num++;
  380. }
  381. $buf.='</td></tr></table>';
  382. if(!($fr=fopen("../cpdata/$cpdata[cp_id].html", 'w' )))
  383. ACP_MessageBox('无法打开文件');
  384. flock( $fr, LOCK_EX);
  385. fwrite( $fr, $buf );
  386. fclose( $fr );
  387. Header("Location: index.php?mode=cp_man");
  388. exit();
  389. break;
  390. }
  391. ?>