Location: PHPKode > projects > iLP System > Release 2.2/upload/lib/lib.functions.php
<?php
/**
 * iLP System Funktionsbilbiothek
 * 
 * Autor:		Florian "ApoY2k" Peschka
 * Projekt:		iLP System
 * Paket:		apoy2k.ilp.wrynn.lib
 * Lizenz:		CreativeCommons (by-nc-sa)
 * Kontakt:		hide@address.com
 * Version:		2.1.2
 */

/**
 * Diese Funktion bindet eine Template-Datei in den momenanten Dokumentfluss ein und übergibt
 * das Template-Array und die Sprachvariablen mit in das eingebundene Template, die vorher im
 * Skript definiert wurden.
 * Sollte keine der beiden Variablen definiert sein, werden Standardwerte benutzt.
 */
function showTemplate($at_tpl = 'error', $at_tpl_array = null, $at_lang_array = null)
{
	$tpl = $at_tpl_array;
	$lang = $at_lang_array;
	
	// Check if the user is active at the officer panel and set the template directory correctly
	$templates = BACKEND_ACTIVE ? BASEDIR_BACKEND : BASEDIR;
	
	// Prüfung der Existenz des angeforderten Templates
	if (file_exists($templates.'lib/templates/tpl.'.$at_tpl.'.php'))
	{
		require($templates.'lib/templates/tpl.'.$at_tpl.'.php');
	}
    
	else {
		$tpl = $at_tpl_array;
		$lang = $at_lang_array;
		
		$tpl['error']['date'] = date('d.m.Y - H:i:s');
		$tpl['error']['action'] = 'Template anzeigen';
		isset($_SESSION['user']) ? $tpl['error']['actor'] = $_SESSION['user']['login'] : $tpl['error']['actor'] = 'Gast';
		$tpl['error']['result'] = 'Template "'.$at_tpl.'" konnte nicht gefunden werden';
		$tpl['error']['location'] = $templates.'lib/templates/tpl.'.$at_tpl.'.php';
		$tpl['error']['module'] = '0 (base-php)';
		
		showTemplate('error', $tpl, $lang);
	}
}

// Entschlüsselt die iLP-URL in der Adressleiste und gibt das ihr zugrunde liegende Array zurück.
function ilpUrlDecode($at_url)
{
	return explode(';', base64_decode($at_url));
}

// Verschlüsselt einen String in die iLP-URL. Wenn Daten als Array übergeben werden sollen, werden diese durch Semikola getrennt.
function ilpUrlEncode($at_str)
{
	return base64_encode($at_str);
}

// Wandelt Texte aus der Datenbank in sicheres und valides XHTML um.
function dbToHTML($at_text)
{
	return nl2br(htmlspecialchars($at_text, ENT_QUOTES));
}

/**
 * Links zu Items über die XML-Schnittstelle von WoW-Head validieren.
 *
 * Wenn das Item nicht gefunden wird oder die XML-Schnittstelle nicht geladen werden konnte,
 * werden entsprechende "Fehlerlinks" als Ergebnis ausgegeben.
 *
 * Um lange Ladezeiten zu verhinden, versucht die Funktion zuerst, die Daten eines Items aus der
 * Datenbank zu laden.
 * Wenn das Item nicht in der Datenbank vorhanden ist, wird ein Eintrag angelegt.
 */
function getWowHeadLink($itemid, $lang = 'en', $at_options = array())
{
	if ('0' == $itemid) {
		$html = '(No item selected)';
	} else {
		
		// PDO-Datenbankverbindung aufbauen
		include('lib.config.db.php');
		
		// Itemcache nach dem anzuzeigenden Item durchsuchen.
		$get_cache_item = $db->prepare("SELECT * FROM `ilp_itemcache` WHERE `item_id` = :item_id LIMIT 0,1");
		$get_cache_item->execute(array(':item_id' => $itemid));
		
		/**
		 * Wenn das Item im Cache gefunden wurde, die Daten daraus auslesen und anzeigen, ohne direkt
		 * auf WoW-Head zuzugreifen.
		 */
		if (1 == $get_cache_item->rowCount()) {
			
			// Daten des Items speichern
			$irow = $get_cache_item->fetch();
		}
		else
		{
			// Load item
			$xml_en = simplexml_load_file('http://www.wowhead.com/?item='.$itemid.'&xml', null, LIBXML_NOCDATA);
			
			// Save basic name and quality
			if (isset($xml_en) && !strpos($xml_en->error, 'not'))
			{
				$q = $xml_en->item->quality->attributes();
				$irow['quality'] = $q['id'];
				$irow['name_en'] = $xml_en->item->name;

				// Load localized item names
				$xml_de = simplexml_load_file('http://de.wowhead.com/?item='.$itemid.'&xml', null, LIBXML_NOCDATA);
				$xml_es = simplexml_load_file('http://es.wowhead.com/?item='.$itemid.'&xml', null, LIBXML_NOCDATA);
				$xml_fr = simplexml_load_file('http://fr.wowhead.com/?item='.$itemid.'&xml', null, LIBXML_NOCDATA);
				$xml_ru = simplexml_load_file('http://ru.wowhead.com/?item='.$itemid.'&xml', null, LIBXML_NOCDATA);
				
				// Save localized names
				if (isset($xml_de) && !strpos($xml_en->error, 'not'))
				{
					$irow['name_de'] = $xml_de->item->name;
				}
				else
				{
					$irow['name_de'] = 'Item #'.$itemid;
				}
				
				if (isset($xml_es) && !strpos($xml_en->error, 'not'))
				{
					$irow['name_es'] = $xml_es->item->name;
				}
				else
				{
					$irow['name_es'] = 'Item #'.$itemid;
				}
				
				if (isset($xml_fr) && !strpos($xml_en->error, 'not'))
				{
					$irow['name_fr'] = $xml_fr->item->name;
				}
				else
				{
					$irow['name_fr'] = 'Item #'.$itemid;
				}
				
				if (isset($xml_ru) && !strpos($xml_en->error, 'not'))
				{
					$irow['name_ru'] = $xml_ru->item->name;
				}
				else
				{
					$irow['name_ru'] = 'Item #'.$itemid;
				}
				
				// Check, if this item is heroic
				if (strpos($xml_en->item->json, 'heroic'))
				{
					$irow['name_en'] .= ' (H)';
					$irow['name_de'] .= ' (H)';
					$irow['name_es'] .= ' (H)';
					$irow['name_fr'] .= ' (H)';
					$irow['name_ru'] .= ' (H)';
				}
			}
			else
			{
				
				// Save template data
				$irow['quality'] = '1';
				$irow['name_en'] = 'Item #'.$itemid;
				$irow['name_de'] = $irow['name_en'];
				$irow['name_es'] = $irow['name_en'];
				$irow['name_fr'] = $irow['name_en'];
				$irow['name_ru'] = $irow['name_en'];
			}
			
			// Daten des Items in den ItemCache eintragen.
			$set_item = $db->prepare("INSERT INTO ilp_itemcache (item_id, quality, name_en, name_de, name_es, name_fr, name_ru) VALUES (?, ?, ?, ?, ?, ?, ?)");
			$set_item->execute(array($itemid, $irow['quality'], $irow['name_en'], $irow['name_de'], $irow['name_es'], $irow['name_fr'], $irow['name_ru']));
		}
		
		// HTML-Link generieren
		if (isset($at_options) && !empty($at_options))
		{
			if (array_key_exists('set_id', $at_options))
			{
				$html = '<a class="q'.$irow['quality'].'" href="javascript:$(\'input#'.$at_options['set_id'].'\').val(\''.$itemid.'\');$(\'div#jquery-live-search\').slideUp({duration:400});" rel="item='.$itemid.'&amp;domain='.$lang.'">['.$irow['name_'.$lang].']</a>';
			}
		}
		else
		{
			$html = '<a class="q'.$irow['quality'].'" href="?ilp='.ilpUrlEncode('search;item;'.$itemid).'" rel="item='.$itemid.'&amp;domain='.$lang.'">['.$irow['name_'.$lang].']</a>';
		}
	}
	flush();
	return $html;
}

// Logeinträge schreiben
function writeLog($at_actor, $at_victim, $at_action, $at_values = array())
{
	// PDO-Datenbankverbindung aufbauen
	include('lib.config.db.php');
	
	// Logeintrag speichern
	$log = $db->prepare("INSERT INTO `ilp_actionlog` (`actor`, `victim`, `action`, `values`) VALUES (?, ?, ?, ?)");
	$log->execute(array($at_actor, $at_victim, $at_action, serialize($at_values)));
	
	if (1 != $log->rowCount() || '000000' != $log->errorCode())
	{
		$tpl['error']['action'] = 'Log schreiben';
		$tpl['error']['location'] = 'functions.php:138';
		$tpl['error']['result'] = serialize($log->errorInfo());
		$tpl['error']['level']	= '0 (base-php)';
	}
}

// Benutzerarray nach Spielernamen sortieren
function sortUsers($at_users)
{
	for ($i = 0; $i < sizeof($at_users); $i++)
	{
		for ($j = $i + 1; $j < sizeof($at_users); $j++)
		{
			$res = strnatcasecmp($at_users[$i]['char']['name'], $at_users[$j]['char']['name']);
			if ($res > 0)
			{
				$tmp = $at_users[$i];
				$at_users[$i] = $at_users[$j];
				$at_users[$j] = $tmp;
			}
		}
	}
	return $at_users;
}

// URL-Sonderzeichen umwandeln
function getSafeURL($at_string)
{
	return str_replace(array('%2F', '%3A'), array('/', ':'), urlencode($at_string));
}

// Dynamische Fortschrittsbalken mit verschiedenen Größen- und Fortschrittsangaben erstellen
function getProgressBar($at_bar_width, $at_progress)
{
	
	// Angezeigten Bereich berechnen
	$bar = round(120 - (($at_progress * $at_bar_width) / 100), 2);
	
	// Check if the user is active on the backend and change the relative imagepath
	$images = BACKEND_ACTIVE ? '../' : '';
	
	// Je nach Fortschritt verschiedene Farben zuweisen
	$html = '<img src="'.$images.'images/progressbar.gif" style="width: '.$at_bar_width.'px; height: 12px; background: -'.$bar.'px url('.$images.'images/progressbg_';
	
	if (33 >= $at_progress)		{$html .= 'red';}
	elseif (66 >= $at_progress)	{$html .= 'yellow';}
	else {$html .= 'green';}
	
	$html .= '.gif); vertical-align: text-top;" />';
	return $html;
}

// Returns an html-table that can be used to display the armory-lite version of a character's stats in plain html
function getPlayerStats($at_zone, $at_realm, $at_name)
{
	// Open the AJAX-Interface
	$file = fopen('http://armorylite.com/inc/ajax_powered?il=&z='.$at_zone.'&r='.$at_realm.'&n='.$at_name, 'r');
	
	if ($file)
	{
		// Read the file
		$file_content = fread($file, 2048);
		
		// If the user could not be found, show an error message
		if (strpos($file_content, 'not'))
		{
			return '<span class="warning"><p>Player not found</p></span>';
		}
		else
		{
			// Strip content to usable html
			$html = str_replace('\\\'', '', substr($file_content, 11, -13));
			
			return $html;
		}
	}
}

?>
Return current item: iLP System