<?php
session_start();
if(isset($_GET['apiquery'])){
	define('SYSPATH',realpath(dirname(__FILE__)).'/acp');
	include(SYSPATH.'/Core/API/api.php');
	exit();	
}



$time_start = microtime_float();
error_reporting(E_ERROR);

define('SYSPATH',preg_replace('/\/$/','',realpath(dirname(__FILE__))).'/acp');
define('EXTERNAL',true);
include(SYSPATH.'/Core/Classes/class.Less.php');
$core=new Less();

// check wether user is logged in or not
if($core->frontendLocked() && $core->session->checkSession()==false){
	exit();
}


if(isset($_GET['updateBrowsCap'])){
	$core->clientBrowser(true);	
}


//-------Target-FormFactorDetection--------//
if($core->autoselectDevice()){
	
	$target='';
	
	if(isset($_GET['target'])){
		$_SESSION['ttt']=trim($_GET['target']);
	}
	
	if(isset($_SESSION['ttt'])){
		$target=$_SESSION['ttt'];
		$clientScreen='SESSION';
		$diag='SESSION';
	}else{
	
		$target='desktop';
		$b=$core->clientBrowser();
		if($b['isMobileDevice']){
			if(isset($_GET['bot'])){
				$target='desktop';
			}else if(isset($_COOKIE['LessClientScreen'])){
				$device=intval($_COOKIE['LessClientScreen']);
				if($device<5){
					$target='mobile_s';	
				}else if($device<8){
					$target='mobile_l';
				}else{
					$target='desktop';
				}
			}else{
				if($b['JavaScript']){
					echo '
					<!DOCTYPE html>
						<html>
							<head>
								<style type="text/css">
									/* Smartphones */
									@media only screen and (min-width : 320px) { #DeviceDetection { width: 2px; } }
									/* iPhone 6+ */
									@media only screen and (min-device-width: 414px) and (max-device-height: 736px) and (orientation : landscape) and (-webkit-device-pixel-ratio: 3){ #DeviceDetection { width: 3px; } }
									@media only screen and (min-device-width: 414px) and (max-device-height: 736px) and (orientation : portrait) and (-webkit-device-pixel-ratio: 3){ #DeviceDetection { width: 4px; } }
									/*tablets*/
									@media only screen and (min-device-width : 800px) { #DeviceDetection { width: 5px; } }
									/* iPads */
									@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) { #DeviceDetection { width: 6px; } }
									@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) { #DeviceDetection { width: 7px; } }
									
									/* Desktops and laptops */
									@media only screen  and (min-width : 1365px) { #DeviceDetection { width: 8px; } }
		
								</style>
								<script>
									window.onload=function (){
										if(!navigator.cookieEnabled){
											window.location.href+=(window.location.href.match(/\?/)?"&":"?")+"target=desktop";
										}else{
											var w = document.getElementById("DeviceDetection").offsetWidth;
											var d=new Date();
											d.setDate(d.getDate() + 365);	
											document.cookie="LessClientScreen="+w+"; expires="+d.toUTCString().replace("GMT","UTC")+"; path=/";
											window.location.reload();
										}
									}
								</script>
							</head>
							<body>
								<div id="DeviceDetection"></div>	
								<!-- a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'" >http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'?bot=1</a>
								<form name="detection" id="detection" method="post" action="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'">
									<input type="hidden" name="LessClientScreen" id="screenSize" value="" />
									<input type="hidden" name="LessClientTouchable" id="touchable" value="" />
								</form -->
							</body>
						</html>';
					exit();
				}
			}
		}
	}
}else{
	$target='desktop';
}

if(!is_dir($core->basePath().'Templates/webTemplates') || !is_dir($core->basePath().'Templates/webTemplates/'.$target)){
	header("HTTP/1.0 404 Not Found");
	exit();
}

$core->externalTarget($target);
$core->tpl->assign('target',$target);
//-------Target-FormFactorDetection END-------//

//getLanguageData
$requestUrl=$core->externalRequestUrl().'/api/languages/languages.json';
$langData=getApiContents($requestUrl);
$langData=json_decode($langData,true);
$core->tpl->assign('languageData',$langData);

$langs=array();

if(is_array($langData)){
	for($i=0;$i<count($langData);$i++){
		if(isset($langData[$i]['Language']['code'])){
			$langs[]=strtoupper($langData[$i]['Language']['code']);
			if($langData[$i]['Language']['default']=='1'){
				$lang=strtoupper($langData[$i]['Language']['code']);
				if(!$core->languageNegotiation()) break;
			}
		}
	}

}

if($core->languageNegotiation()){

	$preferedLangs=array();
	$tmp=explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if(is_array($tmp)){
		for($i=0;$i<count($tmp);$i++){
			list($l0)=explode(';',$tmp[$i]);
			if(is_string($l0)){
				list($l1,$l2)=explode('-',$l0);
				if(is_string($l1) && trim($l1)!='') $preferedLangs[]=strtoupper(trim($l1));
				if(is_string($l2) && trim($l2)!='') $preferedLangs[]=strtoupper(trim($l2));
			}
		}
		$preferedLangs=array_unique($preferedLangs,SORT_STRING);

	}

	for($i=0;$i<count($preferedLangs);$i++){
		if(in_array($preferedLangs[$i],$langs)){
			$lang=$preferedLangs[$i];
			break;
		}
	}
}


if(isset($_GET['lang']) && preg_match('/^[a-zA-Z]{2,5}$/',$_GET['lang'])){
	$lang=strtoupper($_GET['lang']);
	$_SESSION['lessLanguageSetting']=$lang;
}else if(isset($_SESSION['lessLanguageSetting']) && preg_match('/^[a-zA-Z]{2,5}$/',$_SESSION['lessLanguageSetting'])){
	$lang=strtoupper($_SESSION['lessLanguageSetting']);
}

$core->languageUI($lang);
$core->languageC($lang);

$core->tpl->assign('requestedLanguage',$lang);

//getAppDefaults
$requestUrl=$core->externalRequestUrl().'/api/default/default.json?translation='.$lang;
$defaultData=getApiContents($requestUrl);
$defaultData=json_decode($defaultData,true);
$core->tpl->assign('defaultData',$defaultData);


$error='';
//getNavTree
$requestUrl=$core->externalRequestUrl().'/api/ObjectRelations/tree.json?translation='.$lang;
$navJSON=trim(getApiContents($requestUrl));
$nav=json_decode($navJSON,true);
$core->tpl->assign('NavigationTree',$nav);
$core->tpl->assign('NavigationTreeJSON',$navJSON);

$module=null;
$object=null;
$param1=null;
$param2=null;
$param3=null;
//extract requested Module and Object
if(isset($_GET['query'])){
	$tmp=explode('/',$_GET['query']);
	if(is_array($tmp)){
		if(isset($tmp[0]) && trim($tmp[0])!=''){
			$module=$tmp[0];
		}
		
		if(isset($tmp[1]) && trim($tmp[1])!=''){
			$object=$tmp[1];
		}
		
		if(isset($tmp[2]) && trim($tmp[2])!=''){
			$param1=$tmp[2];
		}
		
		if(isset($tmp[3]) && trim($tmp[3])!=''){
			$param2=$tmp[3];
		}
		
		if(isset($tmp[4]) && trim($tmp[4])!=''){
			$param3=$tmp[4];
		}
	}
}

if(isset($_GET['module']) && is_string($_GET['module'])){
	$module=trim($_GET['module']);
}
if(isset($_GET['object']) && is_string($_GET['object'])){
	$object=trim($_GET['object']);
}
if(isset($_GET['param1']) && is_string($_GET['param1'])){
	$param1=trim($_GET['param1']);
}
if(isset($_GET['param2']) && is_string($_GET['param2'])){
	$param2=trim($_GET['param2']);
}
if(isset($_GET['param3']) && is_string($_GET['param3'])){
	$param3=trim($_GET['param3']);
}

//load default start page
if(is_null($module) && is_null($object)){
	if(is_array($nav['branches']) && count($nav['branches'])>0){
		$entryPoint=$nav['branches'][0]['ObjectTreeBranch'];
		if(trim($entryPoint['relatedObjectType'])==''){
			if(trim($entryPoint['webRepresentation'])!=''){
				$target=trim($entryPoint['webRepresentation']);
				if(strpos($target,'://')===false){
					$target='http://'.$target;
				}
				header('location: '.$target);
				exit();
			}else{
				$error='Invalid Entry-Point.';
			}
		}else if(intval($entryPoint['relatedObjectId'])>0){
			$module=trim($entryPoint['relatedObjectType']);
			$object=intval($entryPoint['relatedObjectId']);
		}else{
			$error='Invalid Entry-Point-Id.';
		}
	}else{
		$error='Could not find Entry-Point.';
	}
}

if($error!=''){
	$module='404';
	$core->externalError=$error;
}


if(!is_null($module) && trim($module)!='' && $module!='404' && !is_null($object) && trim($object)!=''){
	
	//getObject
	$requestUrl=$core->externalRequestUrl().'/api/'.$module.'/'.$module.'/'.$object.'.json?translation='.$lang;
	$data=getApiContents($requestUrl);
	$data=json_decode($data,true);
	$dataTranslation=$data[$module]['translations'][0][$module.'Translation'];
	$core->tpl->assign('data',$data);	
	$core->tpl->assign('dataTranslation',$dataTranslation);
	
	if($core->deliverRelations()){
		//getObjectRelations
		$requestUrl=$core->externalRequestUrl().'/api/'.$module.'/relations/'.$object.'.json?translation='.$lang.'&fulldata=1&withSubConnections=1';
		$relations=getApiContents($requestUrl);
		$relations=json_decode($relations,true);
	}else{
		$relations=array();
	}
	$core->tpl->assign('relations',$relations);
}

$core->loadTemplate($module);

$time_end = microtime_float();
$time = $time_end - $time_start;
$core->externalDebugInfo='<p class="debugInfo">'.round(($time*1000),1).' ms | '.round((memory_get_usage()/pow(1024,2)),2).' MB | Target : '.$target.' - '.(isset($diag)?$diag:'').' | Module : '.$module.' | Object : '.$object.'</p>';

$core->displayTemplate();
exit();

function microtime_float(){
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

function getApiContents($url){
	
	global $core;
	$options=null;
	$clientId='dev';
	$clientSecret=$core->APIsharedSecret();
	$accessToken='dev';
	$accesTokenSecret=$core->APIsharedSecret();
	$method='GET';
	$hashMethod='HMAC-SHA1';
	$res=Helper::sendOAuthRequest($url,$options,$clientId,$clientSecret,$accessToken,$accesTokenSecret,$method,$hashMethod);
	return $res;
	
}


?>


