<?php
namespace OfficeBrain\Bundle\ShippingEstimatorBundle\Manager\Extended;

use OfficeBrain\Bundle\ShippingEstimatorBundle\Manager\AbstractManager\ShippingEstimatorAbstract;
use OfficeBrain\Bundle\ShippingEstimatorBundle\Manager\Service\ShippingEstimatorService;
use OfficeBrain\Bundle\ShippingEstimatorBundle\Helper\UPSHelper;

Class TrackUPSExtended extends ShippingEstimatorAbstract
{
	public function __construct($entityManager, $request, $session, $productDetailService)
	{
		parent::__construct($entityManager, $request, $session, $productDetailService);
	}
	
	public function __destruct()
	{
		parent::__destruct();
	}
	
	public function getProductDetailForShipping($productId,$qty)
	{
		$productShippingDetail=parent::getProductDetailForShipping($productId,$qty);
		return $productShippingDetail;
	}
	
	public function callRequest($shippingEstiDetail,$shippingEstiConfi,$callFrom)
	{
		$ObjFedex = new UPSHelper('track',$shippingEstiConfi);
		$webAuthenticationDetail=$ObjFedex->setAuthenticationDetail();
		$trackRequest=$ObjFedex->setTrackRequestDetail($shippingEstiDetail);
		$trackreq = $webAuthenticationDetail.$trackRequest;

		$ch = curl_init("https://www.ups.com/ups.app/xml/Track");
		curl_setopt($ch, CURLOPT_HEADER, 1);
		curl_setopt($ch,CURLOPT_POST,1);
		curl_setopt($ch,CURLOPT_TIMEOUT, 60);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
		curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
		curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$trackreq);
		$result=curl_exec ($ch);

		//$result = shell_exec('/usr/bin/curl -k -d '.escapeshellarg($data_curl).'https://www.ups.com/ups.app/xml/Track');

		$data = strstr($result, '<?');
		$xml_parser = xml_parser_create();
		xml_parse_into_struct($xml_parser, $data, $vals, $index);
		xml_parser_free($xml_parser);
		$params = array();
		$level = array();
		foreach ($vals as $xml_elem)
		{
			if ($xml_elem['type'] == 'open') {
				if (array_key_exists('attributes',$xml_elem)) 
				{
					list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
				}
				else 
				{
					$level[$xml_elem['level']] = $xml_elem['tag'];
				}
			 }
			if ($xml_elem['type'] == 'complete')
			{
				$start_level = 1;
				$php_stmt = '$params';
				while($start_level < $xml_elem['level']) {
					$php_stmt .= '[$level['.$start_level.']]';
					$start_level++;
				}
				$php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
				eval($php_stmt);
			 }
		}
		curl_close($ch);
		return $params;
	}
	
}