%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /data/www_bck/varak.net_bck/wow2.varak.net/itemstats/includes/
Upload File :
Create Path :
Current File : //data/www_bck/varak.net_bck/wow2.varak.net/itemstats/includes/wowhead.php

<?php

/*
 * ParseWowhead
 * started: 31/05/2007
 *
 * author: Frank Matheron
 * email: fenuzz@gmail.com
 * description: create itemstats tooltips using wowhead
 *
 * version: 0.3.9
 *
 */

include_once(dirname(__FILE__) . '/../config.php');
include_once(dirname(__FILE__) . '/../config_wowhead.php');
include_once(dirname(__FILE__) . '/xmltoarray.inc.php');
//include_once(dirname(__FILE__) . '/download_file.php');
include_once(dirname(__FILE__) . '/download_file.php');

// The main interface to the Wowhead parser
class ParseWowhead
{
	// Attempts to retrieve data for the specified item from Wowhead 
	function getItem($name)
    	{
		// Ignore blank names.
		$name = trim($name);
		if (empty($name)) { return null; }
		
		$item = array('name' => $name);

		// remove extra spaces (vB is known to add them)
		$fixed_name = implode(' ', preg_split ("/[\s\+]+/", urldecode(urldecode($name))));
	
		// encode the name so it can be used to build the url
		$encoded_name = urlencode(utf8_encode($fixed_name));
		$encoded_name = str_replace('+' , '%20' , $encoded_name);

		$item_url = 'http://www.wowhead.com/?item=' . $encoded_name . '&xml';
		return $this->buildTooltip($this->getItemData($item_url));
	}
	
	// Attempts to retrieve data for the specified item from Wowhead by its wowhead itemid
	function getItemId($item_id)
	{
		$item_url = 'http://www.wowhead.com/?item=' . $item_id . '&xml';
		return $this->buildTooltip($this->getItemData($item_url));
	}

	/**
	 * Parses the XML representation of the item data
	 *
	 * $item_url = the URL to the item data (XML).
	 */
	function getItemData($item_url)
	{
		// retrieve the item data
		unset($xml_parser); // unset $xml_parser to prevent warnings on PHP4x
		$xml_parser = new XmlToArray();
		$xml_item_data = itemstats_read_url($item_url);
		$item_data = $xml_parser->parse($xml_item_data);

		if ($item_data[0]['child'][0]['name'] == 'ERROR') {
			return false;
		}
		// apparantly weve got valid item data

		return $item_data;
	}
	
	/**
	 * Builds the tooltip using the parsed XML data.
	 *
	 * $item_data = parsed XML item data.
	 */
	function buildTooltip($item_data) 
	{
		$item = array();

		if (!$item_data) {
			unset($item['link']);
			return $item;
		}
		
		// create an array of item properties
		$properties = array();
		foreach($item_data[0]['child'][0]['child'] as $property) {
			$properties[$property['name']]['data'] = $property['data'];
			$properties[$property['name']]['attr'] = $property['attr'];
		}

		// set item data
		$item['id'] = $item_data[0]['child'][0]['attr']['ID'];
		$item['name'] = $properties['NAME']['data'];
		$item['lang'] = 'en';
		$item['link'] = $properties['LINK']['data']; // wowhead url to the item
		$item['icon'] = strtolower($properties['ICON']['data']); // icon filename without an extension

		// if download icons is enabled, download the icon
		if (DOWNLOAD_ICONS) {
			if (!$this->downloadIcon($item['icon'])) {
				// failed to download the icon, use default
				$item['icon'] = DEFAULT_ICON;
			}
		}
		
		// set the item color based on the item quality
		switch ($properties['QUALITY']['attr']['ID']) {
			case 0:
				$item['color'] = 'greyname';
				break;
			case 1:
				$item['color'] = 'whitename';
				break;
			case 2:
				$item['color'] = 'greenname';
				break;
			case 3:
				$item['color'] = 'bluename';
				break;
			case 4:
				$item['color'] = 'purplename';
				break;
			case 5:
				$item['color'] = 'orangename';
				break;
			case 6:
				$item['color'] = 'redname';
				break;
			default:
				$item['color'] = 'greyname';
				break;
		}
		
		// create the tooltip html
		if (substr($properties['HTMLTOOLTIP']['data'], 0, 7) != '<table>') {
			$item['html'] = '<table><tr><td>' . $properties['HTMLTOOLTIP']['data'] . '</td></tr></table>';
		} else {
			$item['html'] = $properties['HTMLTOOLTIP']['data'];
		}
		// remove tooltips from the tooltip -_-
		$item['html'] = preg_replace('/<span class="q2 tip" onmouseover=".+?".+?>(.+?)<\/span>/', '<span class="q2">\\1</span>', $item['html']);
		// remove the width attributes from the tooltips, they mess the tooltip up in IE
		$item['html'] = str_replace(' width="100%"', '', $item['html']);
		// tooltip title/item name links to its wowhead page
		$item['html'] = str_replace($item['name'], '<a href=\'' . $item['link'] . '\' target=\'_new\'>' . $properties['NAME']['data'] . '</a>', $item['html']);
		// add escape slashes
		$item['html'] = str_replace('"', '\'', $item['html']);
		// place the tooltip content html into the tooltip template
		$template_html = trim(file_get_contents(dirname(__FILE__) . '/../templates/' . WOWHEAD_TEMPLATE));
		$item['html'] = str_replace('{ITEM_HTML}', $item['html'], $template_html);		

		return $item;	
	}

	// downloads an icon
	function downloadIcon($iconname) 
	{
		if (DOWNLOAD_ICONS) {
			if (file_exists(LOCAL_ICON_STORE_PATH . $iconname . ICON_EXTENSION)) {
				// file already exists, dont download
				return true; // return true, the icon is ready to use
			} else {
				// the icon is not available, attempt to download
				return download_file(REMOTE_ICON_STORE_PATH . $iconname . ICON_EXTENSION, LOCAL_ICON_STORE_PATH . $iconname . ICON_EXTENSION);
			}
		}
		return false;
	}

	// Cleans up resources used by this object.
	function close() {}
}

?>

Zerion Mini Shell 1.0