<?php
///////////////////////////////////////////////////////////////////////////////////////////
///Script PHP/MYSQL of management of classifieds ads developed by Script PAG
///Script PAG all rights reserved. Use under license. http://www.script-pag.com
///////////////////////////////////////////////////////////////////////////////////////////

############################################################

use \loader as loader;
use \modules as modules;
use \pool as pool;

///////////////////////////////////
//Return http link
//////////////////////////////////
function route($target, $params = null) {
	global $route, $slug;
	$link = modules::mode() === 'SP' ? URL.'/' : URL_DISPLAY;
	if(modules::mode() === 'SP') {
		$url = array_filter(explode('/', urldecode($_SERVER['REQUEST_URI'])));	
		$link .= array_shift($url).($target != '/' && is_string($target) && strlen($target) > 0 ? '/'.$target : '');
	} else if($target != '/' && is_string($target) && strlen($target) > 0) {
		$link .= '/';
		$route = is_array($route) ? $route : is_module_route($target);			
		$slug = is_array($route) && modules::getModule($route[0]) ? modules::getModule($route[0])->route($target) : null;
		$link .= $slug ? $slug : $target;
	}
	if(is_array($params) && sizeof($params) > 0) $link .= (strpos($link, '?') < 0 || !strpos($link, '?') ? '?' : '').http_build_query($params);
	return substr($link, -1) == '?' ? substr($link, 0, -1) : $link;
}

///////////////////////////////////
//Set $layout module.php variable to false
//////////////////////////////////
function disableLayout() {
	global $layout;
	$layout = false;
	return $layout;
}

///////////////////////////////////						   
//Set $account value to $value used when module is controller
//////////////////////////////////
function set_account_value($value) {
	global $account;
	$account = $value;
	return $account;
}

///////////////////////////////////
//Set $index value to $value used when module is controller
//////////////////////////////////
function set_index_value($value) {
	global $index;
	$index = $value;
	return $index;
}

///////////////////////////////////
//Test if the slug is module route
//////////////////////////////////
function is_module_route($slug) {
	$modules_slugs = modules::routes();
	return isset($modules_slugs[$slug]) ? $modules_slugs[$slug] : false;
}

///////////////////////////////////
//Add new entry to pool
//////////////////////////////////
function pool($hook, $action) {
	return pool::add($hook, $action);
}

///////////////////////////////////
//Add new entry to displayModuleLinkTag pool entry
//////////////////////////////////
function linkTag($value, $data = null) {
	return modules::linkTag($value, $data);
}

///////////////////////////////////
//Add new entry to displayModuleScriptTag pool entry
//////////////////////////////////
function scriptTag($value, $data = null) {
	return modules::scriptTag($value, $data);
}

///////////////////////////////////
//Add new entry to displayModuleMetaTag pool entry
//////////////////////////////////
function metaTag($value, $data = null) {
	return modules::metaTag($value, $data);
}
	
///////////////////////////////////
//Transform array to string like $key=$value
//////////////////////////////////
function arrayToString($attributs) {
	$string = '';
	$empty_auth = array('action');
	$no_display = array('content_separator', 'cancel');	
	if(is_array($attributs)) {
		foreach($attributs as $key => $elt) {
			if(!in_array($key, $no_display) && (strlen($elt) > 0 || in_array($key, $empty_auth))) $string .= ' '.$key.'='.(isJson($elt) ? "'".$elt."'" : '"'.$elt.'"');
		}
	}
	return $string;
}

///////////////////////////////////
//Test if $string is json object
//////////////////////////////////
function isJson($string) {
	$is_json = false;
	if(is_string($string)) {
		json_decode($string);
		$is_json = json_last_error() === JSON_ERROR_NONE;
	}
	return $is_json;
}

///////////////////////////////////
//Return module or SP language
//////////////////////////////////
function language() {
	global $language, $language_adm, $controller, $action;
	$context = func_num_args() === 2 ? (substr(func_get_arg(0), -9) === '_language' ? func_get_arg(0) : strtolower(func_get_arg(0).'_language')) : null;
	$name = func_num_args() === 1 ? func_get_arg(0) : (func_num_args() === 2 ? func_get_arg(1) : null);
	$sp = modules::mode() === 'SP' ? $language_adm : $language;
	$result = modules::language($context, $name);
	if(!$result) $result = isset($context) ? (isset($name) ? (isset($sp[$context][$name]) ? $sp[$context][$name] : null) : (isset($sp[$context]) ? $sp[$context] : null)) : (isset($name) ? (isset($sp[$name]) ? $sp[$name] : null) : $sp);
	return $result;
}

///////////////////////////////////
//Return environment code lang
//////////////////////////////////
function codelang() {
	return modules::ready() ? $_SESSION[(modules::mode() === 'SP' ? 'lang' : 'code_lang')] : (isset($_SESSION['lang']) ? $_SESSION['lang'] : $_SESSION['code_lang']);
}

///////////////////////////////////
//Return environment code lang
//////////////////////////////////
function getDefaultLang() {
	global $cache_lang;
	return $cache_lang[key($cache_lang)]['code_lang'];
}

///////////////////////////////////
//Return module cache value
//////////////////////////////////
function cache($context, $name = null) {
	return modules::cache($context, $name);
}

///////////////////////////////////
//Return module data value
//////////////////////////////////
function data($context, $name = null) {
	return modules::data($context, $name);
}

///////////////////////////////////
//Add new row in cahce file
//////////////////////////////////
function logs($file, $row) {
	$path = loader::path($file.'_'.date('mY').'.txt');
	$handler = fopen($path, 'a');
	fwrite($handler, date('Y-m-d H:i:s').'		'.serialize($row).PHP_EOL);
	fclose($handler);
	return true;
}

///////////////////////////////////
//Remove module dir
//////////////////////////////////
function remove_module($name) {
	$dir = loader::exists(strtolower($name));
	if($dir !== false && $dir != loader::path('/')) {
		$dir_iterator = new \RecursiveDirectoryIterator($dir);
		$iterator = new \RecursiveIteratorIterator($dir_iterator, \RecursiveIteratorIterator::CHILD_FIRST);
		foreach($iterator as $files) {
			if($files->getFilename() !== '..' && $files->getFilename() !== '.') $files->isDir() ? rmdir($files) : unlink($files);
		}
		rmdir($dir);
	}
	return true;
}

///////////////////////////////////
//Return default currency code
//////////////////////////////////
function defaultCurrencyCode() {
	global $param_gen;
	$code = null;
	switch($param_gen['currency']) {
		case '€':
			$code = 'EUR';
			break;
		case '$':
			$code = 'USD';
			break;
		case '£':
			$code = 'GBP';
			break;
		default:
			$code = $param_gen['currency'];
			break;
	}
	return $code;
}

///////////////////////////////////
//Return true if is ajax call
//////////////////////////////////
function isAjax() {
	return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ? true : (isset($_POST['is_ajax']) && ($_POST['is_ajax'] == true || $_POST['is_ajax'] == 'true') ? true : false);
}