<?php /* HLstatsX Community Edition - Real-time player and clan rankings and statistics Copyleft (L) 2008-20XX Nicholas Hastings (nshastings@gmail.com) http://www.hlxcommunity.com HLstatsX Community Edition is a continuation of ELstatsNEO - Real-time player and clan rankings and statistics Copyleft (L) 2008-20XX Malte Bayer (steam@neo-soft.org) http://ovrsized.neo-soft.org/ ELstatsNEO is an very improved & enhanced - so called Ultra-Humongus Edition of HLstatsX HLstatsX - Real-time player and clan rankings and statistics for Half-Life 2 http://www.hlstatsx.com/ Copyright (C) 2005-2007 Tobias Oetzel (Tobi@hlstatsx.com) HLstatsX is an enhanced version of HLstats made by Simon Garner HLstats - Real-time player and clan rankings and statistics for Half-Life http://sourceforge.net/projects/hlstats/ Copyright (C) 2001 Simon Garner This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. For support and installation notes visit http://www.hlxcommunity.com */ if ( !defined('IN_HLSTATS') ) die('Do not access this file directly.'); if ($auth->userdata['acclevel'] < 80) die ('Access denied!'); ?> <img src="<?php echo IMAGE_PATH; ?>/downarrow.gif" width=9 height=6 class="imageformat"><b> <?php echo $task->title; ?></b><p> <?php function check_writable() { $ok = ''; $f = IMAGE_PATH."/games/"; if (!is_writable($f)) $ok .= "<li>I have no permission to write to '$f'"; if ($ok != '') { echo 'FATAL:<br><UL>'; echo $ok; echo '</UL><br>Correct this before continuing'; die(); } return true; } function getTableFields($table,$auto_increment) { // get a field array of specified table global $db; $db->query("SHOW COLUMNS FROM $table;"); $res = array(); while ($r=$db->fetch_array()) { if ((!$auto_increment) && ($r['Extra']=='auto_increment')) { continue; } else { array_push($res,$r['Field']); } } return $res; } function copySettings($table,$game1,$game2) { global $db; $db->query("SELECT game FROM $table WHERE game='$game2' LIMIT 1;"); if ($db->num_rows()!=0) $ret = 'Target gametype exists, nothing done!'; else { $db->query("SELECT count(game) AS cnt FROM $table WHERE game='$game1';"); $r = $db->fetch_array(); if ($r['cnt']==0) $ret = 'No data existent for source gametype.'; else { $ret = $r['cnt'].' entries copied!'; $fields = ''; $ignoreFields = array('game','id','d_winner_id','d_winner_count','g_winner_id','g_winner_count','count','picked','kills','deaths','headshots'); foreach (getTableFields($table,0) AS $field) { if (!in_array($field, $ignoreFields)) { if ($fields!='') $fields .= ', '; $fields .= $field; } } $SQL = "INSERT INTO $table ($fields,game) SELECT $fields,'$game2' FROM $table WHERE game='$game1';"; $db->query($SQL); } } return $ret."</li>"; } function mkdir_recursive($pathname) { is_dir(dirname($pathname)) || mkdir_recursive(dirname($pathname)); return is_dir($pathname) || @mkdir($pathname); } function copyFile($source,$dest) { if ($source != '') { $source = IMAGE_PATH."/games/$source"; $dest = IMAGE_PATH."/games/$dest"; if (!is_file($source)) $ret = "File not found $source (dest: $dest)<br>"; else { mkdir_recursive(dirname($dest)); if (!copy($source,$dest)) $ret = 'FAILED'; else $ret = 'OK'; } return "Copying '$source' to '$dest': $ret</li>"; } return ''; } function scanCopyFiles($source,$dest) { global $files; $d = dir(IMAGE_PATH.'/games/'.$source); if ($d !== false) { while (($entry=$d->read()) !== false) { if (is_file(IMAGE_PATH.'/games/'.$source.'/'.$entry) && ($entry != '.') && ($entry != '..')) $files[] = array($source.'/'.$entry,$dest.'/'.$entry); if (is_dir(IMAGE_PATH.'/games/'.$source.'/'.$entry) && ($entry != '.') && ($entry != '..')) scanCopyFiles($source.'/'.$entry,$dest.'/'.$entry); } $d->close(); } } if (isset($_POST['confirm'])) { $game1 = ''; if (isset($_POST['game1'])) if ($_POST['game1']!='') $game1 = $_POST['game1']; $game2 = ''; if (isset($_POST['game2'])) if ($_POST['game2']!='') $game2 = $_POST['game2']; $game2name = ''; if (isset($_POST['game2name'])) if ($_POST['game2name']!='') $game2name = $_POST['game2name']; echo '<ul><br />'; check_writable(); $game2 = valid_request($game2, 0); $game2name = valid_request($game2name, 0); echo '<li>hlstats_Games ...'; $db->query("SELECT code FROM hlstats_Games WHERE code='$game2' LIMIT 1;"); if ($db->num_rows()!=0) { echo '</ul><br /><br /><br />'; echo '<b>Target gametype exists, nothing done!</b><br /><br />'; } else { $db->query("INSERT INTO hlstats_Games (code,name,hidden,realgame) SELECT '$game2', '$game2name', '0', realgame FROM hlstats_Games WHERE code='$game1'"); echo 'OK</li>'; $dbtables = array(); array_push($dbtables, 'hlstats_Actions', 'hlstats_Awards', 'hlstats_Ribbons', 'hlstats_Ranks', 'hlstats_Roles', 'hlstats_Teams', 'hlstats_Weapons' ); foreach ($dbtables as $dbt) { echo "<li>$dbt ... "; echo copySettings($dbt,$game1,$game2); } echo '</ul><br /><br /><br />'; echo '<ul>'; $files = array( array( '', '' ) ); scanCopyFiles("$game1/","$game2/"); foreach ($files as $f) { echo '<li>'; echo copyFile($f[0],$f[1]); } echo '</ul><br /><br /><br />'; echo 'Done.<br /><br />'; } } else { $result = $db->query("SELECT code, name FROM hlstats_Games ORDER BY code;"); unset($games); $games[] = '<option value="" selected="selected">Please select</option>'; while ($rowdata = $db->fetch_row($result)) { $games[] = "<option value=\"$rowdata[0]\">$rowdata[0] - $rowdata[1]</option>"; } ?> <form method="post"> <table width="60%" align="center" border="0" cellspacing="0" cellpadding="0" class="border"> <tr> <td> <table width="100%" border="0" cellspacing="1" cellpadding="10"> <tr class="bg1"> <td class="fNormal" style="text-align:center;"> Are you sure to copy all settings from the selected gametype to the new gametype name?<br> All existing images will be copied also to the new gametype!<p> <input type="hidden" name="confirm" value="1" /> Existing gametype: <select Name="game1"> <?php foreach ($games as $g) echo $g; ?> </select><br /> New gametype code: <input type="text" size="10" value="newcode" name="game2"><br /> New gametype name: <input type="text" size="26" value="New Game" name="game2name"><br /> <input type="submit" value=" Copy selected gametype to the new name " /> </td> </tr> </table></td> </tr> </table> </form> <?php } ?>