* @since 1.0 * @package MammutCMS * @subpackage Module */ class Tourney extends TourneyBase { protected function getMyId() { return 'mcms.tourney'; } public function runIndex(Request $request, Response $response, $activeInstance) { $system = \MCMS\System::getInstance(); $tplfile = __DIR__ . '/_layout_/_default_/' . 'tpl.' . $system->getTarget('action') . '.php'; // define the template file try { $template = new CTemplate(); $template->loadTemplate($tplfile); $template->setParam('title', __CLASS__); $template->setParam('self', $_SERVER['PHP_SELF']); $template->setParam('instance', $activeInstance); $template->setParam('isUser', !is_null($system->getUserSvc()->getUser())); $response->setFragment('CONTENT', $template->getDocument()); } catch(FileNotFoundException $ex) { $response->setFragment('CONTENT', "file is missing: " . $tplfile); } } public function runCreateTourney(Request $request, Response $response, $activeInstance) { if ($user['admin']>=1) { $start = mktime ( $p['stime_h'], $p['stime_m'],0, $p['sdate_m'], $p['sdate_d'], $p['sdate_Y']); $p['roundtime'] *= 60; $p['pausetime'] *= 60; if ($p['roundstarter']<2) $p['roundstarter'] = 2; sql_insert($db['tourney_info'],"'','$p[gid]','$p[endgid]','$p[name]','0','$p[tourney]','$p[admin]','$start','$p[autostart]','$p[autoend]','$p[maxstarter]','$p[teamsize]','$p[rules]','$p[icon]','$p[roundstarter]','$p[matchrounds]','$p[roundtime]','$p[pausetime]','$p[doublerounds]','$p[fixed_times]','$p[svr_from_round]'"); } header("Location: $PHP_SELF?module={$this->caller->module}&amode=$amode"); $return = false; } // removes all data of a tournament public function runDropTourney(Request $request, Response $response, $activeInstance) { if ($user['admin']>=1) { sql_delete($db['tourney_info'],"WHERE `id`='$tid'"); sql_delete($db['tourney_data'],"WHERE `tid`='$tid'"); sql_delete($db['tourney_start'],"WHERE `tid`='$tid'"); } header("Location: $PHP_SELF?module={$this->caller->module}&amode=$amode"); $return = false; } // removes a starter from a tournament public function runRemoveStarter(Request $request, Response $response, $activeInstance) { if ($user['admin']>=1) sql_delete($db['tourney_start'],"WHERE `tid`='$tid' AND `uid`='$uid'"); header("Location: $PHP_SELF?module={$this->caller->module}&amode=$amode&action=tourney_starter&tid=$tid"); $return = false; } protected function updateTStatus($tourney,$status) { global $db; $tid = $tourney['id']; if ($status>0) { switch ($tourney['status']) { case 0: sql_update($db['tourney_info'],"SET `status`=`status`+1 WHERE `id`='$tid'"); break; case 1: sql_update($db['tourney_info'],"SET `status`=`status`+1 WHERE `id`='$tid'"); break; case 2: sql_update($db['tourney_info'],"SET `status`=`status`+1 WHERE `id`='$tid'"); $result = sql_select($db['tourney_start'],"WHERE `tid`='$tid' AND `leader`='y' ORDER BY `seed`"); $i = 0; while ($row = sql_fetch($result)) { $i++; sql_update($db['tourney_start'],"SET `startnum`='$i' WHERE `tid`='$tid' AND `uid`='$row[uid]'"); } break; case 3: $starter = sql_get_count($db['tourney_start'],"WHERE `tid`='$tid' AND `leader`='y'"); switch ($tourney['tourney']) { case 'de': for ($maxstarter = 2; $maxstarter < $starter; $maxstarter = $maxstarter * 2) {} break; case 'se': for ($maxstarter = 2; $maxstarter < $starter; $maxstarter = $maxstarter * 2) {} break; default: $maxstarter = $starter; break; } sql_update($db['tourney_info'],"SET `status`=`status`+1,`maxstarter`='$maxstarter' WHERE `id`='$tid'"); break; case 4: sql_update($db['tourney_info'],"SET `status`=`status`+1 WHERE `id`='$tid'"); break; } } if ($status<0) { switch ($tourney['status']) { case 1: sql_update($db['tourney_info'],"SET `status`=`status`-1 WHERE `id`='$tid'"); break; case 2: sql_update($db['tourney_info'],"SET `status`=`status`-1 WHERE `id`='$tid'"); break; case 3: sql_update($db['tourney_info'],"SET `status`=`status`-1 WHERE `id`='$tid'"); break; // can't go backwards from '4' because if you would be able to do, that sometimes create some data chaos :-( case 5: sql_update($db['tourney_info'],"SET `status`=`status`-1 WHERE `id`='$tid'"); break; } } } protected function getStarter($tourney,$id) { global $cfg,$db,$cache,$_s_dummy; if (empty($cache['starter'][$tourney['id']][$id])) { if ($row = sql_get_row($db['tourney_start'],"WHERE `tid`='$tourney[id]' AND `uid`<>0 AND `startnum`='$id' AND `leader`='y'")) { if ($tourney['teamsize']<=1) { $usr = account_fetch_info($row['uid'],'id'); $name = $usr['nick']; } else { $name = $row['teamname']; } } else { $name = $_s_dummy; } $cache['starter'][$tourney['id']][$id] = $name; } else { $name = $cache['starter'][$tourney['id']][$id]; } return $name; } protected function getTourneyTree($tourney) { global $cfg,$db,$cache,$finished; if (!($tourney['tourney'] == 'de' || $tourney['tourney'] == 'se')) { $field = FALSE; echo "UNABE TO USE THIS FUNCTION ON THAT TOURNEY TYPE"; } else { $c = array(); $field = array(); $rounds = log($tourney["maxstarter"]) / log(2); // generate start fields $x = 0; for ($y=1; $y<=($tourney['maxstarter']/2); $y++) { if ($tourney['status']<3) { $field[$x][($y*2-1)]['sid'] = ($y*2-1); $field[$x][($y*2)]['sid'] = ($y*2); } else { // create dummy entries if ($row = sql_get_row($db['tourney_start'],"WHERE `tid`='$tourney[id]' AND `uid`<>0 AND `startnum`='".($y*2-1)."' AND `leader`='y'")) { $field[$x][($y*2-1)]['sid'] = ($y*2-1); } else { $field[$x][($y*2-1)]['sid'] = -1; } if ($row = sql_get_row($db['tourney_start'],"WHERE `tid`='$tourney[id]' AND `uid`<>0 AND `startnum`='".($y*2)."' AND `leader`='y'")) { $field[$x][($y*2)]['sid'] = ($y*2); } else { $field[$x][($y*2)]['sid'] = -1; } } if ($field[$x][($y*2)-1]['sid']<0) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)]['sid']; $field[($x+1)*-2][$y]['sid'] = -1; } elseif ($field[$x][($y*2)]['sid']<0) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)-1]['sid']; $field[($x+1)*-2][$y]['sid'] = -1; } else { if ($row = sql_get_row($db['tourney_data'],"WHERE `tid`='$tourney[id]' AND `x`='$x' AND `y`='$y'")) { if ($row['p1s1'] == $row['p2s1']) { if ($row['p1s2'] > $row['p2s2']) { $row['p1s1']++; } if ($row['p1s2'] < $row['p2s2']) { $row['p2s1']++; } } if ($row['p1s1'] > $row['p2s1']) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)-1]['sid']; $field[($x+1)*-2][$y]['sid'] = $field[$x][($y*2)]['sid']; } if ($row['p1s1'] < $row['p2s1']) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)]['sid']; $field[($x+1)*-2][$y]['sid'] = $field[$x][($y*2)-1]['sid']; } $field[$x][($y*2-1)]['sc1'] = $row['p1s1']; $field[$x][($y*2-1)]['sc2'] = $row['p1s2']; $field[$x][($y*2)]['sc1'] = $row['p2s1']; $field[$x][($y*2)]['sc2'] = $row['p2s2']; } else { $finished = FALSE; } } } // winner area for ($x = 1; $x < $rounds; $x++) { for ($y = 1; $y <= ($tourney['maxstarter']/2)/pow(2,$x); $y++) { if ($field[$x][($y*2)-1]['sid']<0) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)]['sid']; $field[($x+0.5)*-2][($y*2)]['sid'] = -1; } elseif ($field[$x][($y*2)]['sid']<0) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)-1]['sid']; $field[($x+0.5)*-2][($y*2)]['sid'] = -1; } else { if ($row = sql_get_row($db['tourney_data'],"WHERE `tid`='$tourney[id]' AND `x`='$x' AND `y`='$y'")) { if ($row['p1s1'] == $row['p2s1']) { if ($row['p1s2'] > $row['p2s2']) { $row['p1s1']++; } if ($row['p1s2'] < $row['p2s2']) { $row['p2s1']++; } } if ($row['p1s1'] > $row['p2s1']) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)-1]['sid']; $field[($x+0.5)*-2][($y*2)]['sid'] = $field[$x][($y*2)]['sid']; } if ($row['p1s1'] < $row['p2s1']) { $field[($x+1)][$y]['sid'] = $field[$x][($y*2)]['sid']; $field[($x+0.5)*-2][($y*2)]['sid'] = $field[$x][($y*2)-1]['sid']; } $field[$x][($y*2-1)]['sc1'] = $row['p1s1']; $field[$x][($y*2-1)]['sc2'] = $row['p1s2']; $field[$x][($y*2)]['sc1'] = $row['p2s1']; $field[$x][($y*2)]['sc2'] = $row['p2s2']; } else { $finished = FALSE; } } } } if ($tourney['tourney']=='de') { // looser area for ($x = -1; $x > -1*$rounds; $x--) { for ($y = 1; $y <= ($tourney['maxstarter']/2)/pow(2,-$x); $y++) { if ($field[$x*2][($y*2)-1]['sid']<0) { $field[($x-0.5)*2][($y*2)-1]['sid'] = $field[$x*2][($y*2)]['sid']; } elseif ($field[$x*2][($y*2)]['sid']<0) { $field[($x-0.5)*2][($y*2)-1]['sid'] = $field[$x*2][($y*2)-1]['sid']; } else { if ($row = sql_get_row($db['tourney_data'],"WHERE `tid`='$tourney[id]' AND `x`='$x' AND `y`='$y'")) { if ($row['p1s1'] == $row['p2s1']) { if ($row['p1s2'] > $row['p2s2']) { $row['p1s1']++; } if ($row['p1s2'] < $row['p2s2']) { $row['p2s1']++; } } if ($row['p1s1'] > $row['p2s1']) { $field[($x-0.5)*2][($y*2)-1]['sid'] = $field[$x*2][($y*2)-1]['sid']; } if ($row['p1s1'] < $row['p2s1']) { $field[($x-0.5)*2][($y*2)-1]['sid'] = $field[$x*2][($y*2)]['sid']; } $field[$x*2][($y*2-1)]['sc1'] = $row['p1s1']; $field[$x*2][($y*2-1)]['sc2'] = $row['p1s2']; $field[$x*2][($y*2)]['sc1'] = $row['p2s1']; $field[$x*2][($y*2)]['sc2'] = $row['p2s2']; } else { $finished = FALSE; } } $x -= 0.5; if ($field[$x*2][($y*2)-1]['sid']<0) { $field[($x-0.5)*2][$y]['sid'] = $field[$x*2][($y*2)]['sid']; } elseif ($field[$x*2][($y*2)]['sid']<0) { $field[($x-0.5)*2][$y]['sid'] = $field[$x*2][($y*2)-1]['sid']; } else { if ($row = sql_get_row($db['tourney_data'],"WHERE `tid`='$tourney[id]' AND `x`='$x' AND `y`='$y'")) { if ($row['p1s1'] == $row['p2s1']) { if ($row['p1s2'] > $row['p2s2']) { $row['p1s1']++; } if ($row['p1s2'] < $row['p2s2']) { $row['p2s1']++; } } if ($row['p1s1'] > $row['p2s1']) { $field[($x-0.5)*2][$y]['sid'] = $field[$x*2][($y*2)-1]['sid']; } if ($row['p1s1'] < $row['p2s1']) { $field[($x-0.5)*2][$y]['sid'] = $field[$x*2][($y*2)]['sid']; } $field[$x*2][($y*2-1)]['sc1'] = $row['p1s1']; $field[$x*2][($y*2-1)]['sc2'] = $row['p1s2']; $field[$x*2][($y*2)]['sc1'] = $row['p2s1']; $field[$x*2][($y*2)]['sc2'] = $row['p2s2']; } else { $finished = FALSE; } } $x += 0.5; } } } } return $field; } }