<?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.'&domain='.$lang.'">['.$irow['name_'.$lang].']</a>';
}
}
else
{
$html = '<a class="q'.$irow['quality'].'" href="?ilp='.ilpUrlEncode('search;item;'.$itemid).'" rel="item='.$itemid.'&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;
}
}
}
?>