260 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			260 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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
 | |
| 	}
 | |
| ?>
 |