*
*
* This software is protected by copyright, please
* read the file COPYRIGHT.
* This program is distributed in the hope that it
* will be useful, but without any warranty; without
* even the implied warranty of merchantability or
* fitness for a particular purpose. Please
* read the file LICENCE.
*
* Fichier navigation.php
*
* Ce fichier contient la classe Navigation
*
* @copyright Copyright © 2004-2005, Initiance
* @since 2004/06/07
* @version 0.3
* @link www.rooty.me
* @package object_plugin
* @subpackage AmaranteHttps
*/
if ( !defined('SYSTEM_IN') )
{
die("Hacking attempt");
}
/**
* Constante du plugin [Urlrewrite]
*/
define("CONF_PLUGIN_URLREWRITE_NODE", "espace");
/**
* Test de présence du mod_rewrite et de htaccess
*/
if(function_exists("apache_get_modules"))
$GLOBALS["CONF_PLUGIN_URL_REWRITE"]=( in_array("mod_rewrite", apache_get_modules()) && file_exists(".htaccess"))?true:false;
else
$GLOBALS["CONF_PLUGIN_URL_REWRITE"]=(file_exists(".htaccess"))?true:false;
/**
* Classe Navigation
*
Déclare les fonctions usuelles de gestion d'url, permettent l'activation de Https ou non
* @package object_plugin
* @subpackage Navigation
*/
class Navigation extends Plugin{
/**
* Constructeur de la classe Plugin
* @access public
*/
function Navigation(){
$this->__construct();
}
/**
* Constructeur de la classe Plugin
* @access public
*/
function __construct()
{
parent::__construct("1.0", "Olivier Devaine", "gestion du la navigation granilim");
}
/**
* __beforeSessionStart : methode executée avant que la session commence [Urlrewrite]
*Cette methode à pour but d'être surchagée par le plugin
*pour être executée avant l'initialisation du system
* @abstract
* @access public
* @return booleen
*/
function __beforeSessionStart()
{
if($GLOBALS["CONF_PLUGIN_URL_REWRITE"])
{
/* Changement de noeud courant */
if(( isset($_GET["navigationNodeId"]) ) && ($_GET["navigationNodeId"]!=nid()) || ( isset($_GET["nid"]) ) && ($_GET["nid"]!=nid()) )
{
if ( (isset($_GET["system"])) && (strpos($_GET["system"], "navigationNode")===false) ){
$_GET["system"].=",navigationNode";
}elseif(!isset($_GET["system"])){
$_GET["system"]="navigationNode";
}
}
}
}
/**
* __beforeProcess : methode executée avant que le system ne soit executé [Urlrewrite]
*Cette methode à pour but d'être surchagée par le plugin
*pour être executée avant l'execution system
* @abstract
* @access public
* @return booleen
*/
function __beforeProcess()
{
if(isset($_GET["oid"]) && is_numeric($_GET["oid"]))
$_GET["classe"]=get_class(Navigation::idToSessionCoordinationObject($_GET["oid"]));
}
function idToSessionCoordinationObject($id)
{
if (is_numeric($id) && is_array($GLOBALS["SYSTEM_CONTROL"]->objectArray)){
for($i=0;$iobjectArray);$i++){
if($GLOBALS["SYSTEM_CONTROL"]->objectArray[$i]->getId()==$id){
return $GLOBALS["SYSTEM_CONTROL"]->objectArray[$i];
}
}
}
return $GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($id);
}
/**
* __beforeExec gére le cas d'une authentification https (paramétre dans config HTTPS)
*
* si l'utilisateur essaye de se connecter, on annule l'execution de la page
* on redirige vers la même page en http.
* @access private
*/
function __beforeExec(){
if(isset($_GET["system"])){
if(strpos($_GET["system"],"authSession")!==false && $GLOBALS['CONF_AUTH_SECURE']==true){
if(dirname($_SERVER["PHP_SELF"])!="." && dirname($_SERVER["PHP_SELF"])!="/"){
$dir=dirname($_SERVER["PHP_SELF"])."/";
}else{
$dir="/";
}
// Si tout le système doit être sécurisé ? https sinon http
$urlTo = ($GLOBALS['CONF_ALL_SECURE']==true)?"https://":"http://";
$urlTo.= $_SERVER['HTTP_HOST'].$dir;
systemRedirect($urlTo.$GLOBALS['CONF_PAGE_EXECUTION']);
if(strpos($_GET["system"],"noExec")!==false){
}else{
$_GET["system"].=",noExec"; // permet de ne pas executer l'objet de coordination
}
}
}
}
/**
* formatName utilisé avec UrlRewrite::formatName [Urlrewrite]
*formate une chaîne (node||CoordinationObject)
*
*@return chaine
*@desc chaine chaine sans caractére spéciaux
*/
function formatName($ch)
{
/* Fonction permettant de supprimer les numéros, le point et l'espace à l'affichage */
// $ch = eregi_replace("^[[:space:]]*[a-z]+[.)".chr(176)."][[:space:]]+", "", $ch);
$ch = preg_replace("/^[[:space:]]*[a-z]+[.)".chr(176)."][[:space:]]+/i", "", $ch);
$s = strtolower($ch);
# Gestion des charactères remplaçables
// $s=ereg_replace("à|À|â|Â|ä|Ä","a",$s);
// $s=ereg_replace("ç|Ç","c",$s);
// $s=ereg_replace("è|È|é|É|ê|Ê|ë|Ë","e",$s);
// $s=ereg_replace("î|Î|ï|Ï","i",$s);
// $s=ereg_replace("ô|Ô","o",$s);
// $s=ereg_replace("ù|Ù|û|Û","u",$s);
// # Gestion des espaces
// $s=ereg_replace(" | |-|/|,","_",$s);
// echo $s."
";
$patterns[0] = '/[À|Â|Ä|á|â|à|å|ä]/';
$patterns[1] = '/[è|È|é|É|ê|Ê|ë|Ë]/';
$patterns[2] = '/[Î|Ï|í|î|ì|ï]/';
$patterns[3] = '/[Ô|ó|ô|ò|ø|õ|ö]/';
$patterns[4] = '/[Ù|Û|ú|û|ù|ü]/';
$patterns[5] = '/æ/';
$patterns[6] = '/[ç|Ç]/';
$patterns[7] = '/ß/';
$patterns[8] = '/\s+/';
$replacements[0] = 'a';
$replacements[1] = 'e';
$replacements[2] = 'i';
$replacements[3] = 'o';
$replacements[4] = 'u';
$replacements[5] = 'ae';
$replacements[6] = 'c';
$replacements[7] = 'ss';
$replacements[8] = '_';
$s = preg_replace($patterns, $replacements, $s);
// echo $s."
";
$nb=strlen($s);
$i=0;
while($i<$nb)
{
// Suppression de tous les caractères spèciaux!!!
if ( ((ord(substr($s,$i,1))<97) || (ord(substr($s,$i,1))>122)) && ((ord(substr($s,$i,1))!=95)) ){
$s=substr($s,0,$i).substr($s,($i+1));
$i=0;
$nb=strlen($s);
}
$i++;
}
if (strlen($s)>25)
$s=substr($s,0,25);
return $s;
}
/**
* Fonction formatUrlNode
*
* Formate l'url pour la navigation dans les noeuds
* @public
* @static
* @param chaine nom de la classe à utiliser...
* @param entier identifiant de l'objet
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatté
*/
function formatUrlNode($system, $navigationNodeId, $msg="",$param="")
{
global $SERVER_NAME, $SCRIPT_NAME, $CONF_PERSISTANT_SECURE;
// var_dump($GLOBALS["CONF_PLUGIN_URL_REWRITE"]);
if ($GLOBALS["CONF_PLUGIN_URL_REWRITE"])
{ // [Urlrewrite]
if(strtolower($system) == "navigationnode")
{
$system = CONF_PLUGIN_URLREWRITE_NODE;
}
$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
$Node =$GLOBALS["SYSTEM_USER_SESSION"]->getNode($navigationNodeId);
$nodeName = Navigation::formatName($Node->getLibelle($currentCode));
$pageName = ((isset($pageName))?$pageName:"index");
$url =$nodeName."-". $navigationNodeId."---.htm";
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
} else {
$url.="?abs=1";
}
if ($msg!="")
$url.="&msg=".$msg;
if ($param!="")
$url.="¶m=".$param;
} else {
$url =$GLOBALS['CONF_PAGE_EXECUTION'];
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
}else{
$url.="?abs=1";
}
$url.="&sys=".$system."&nid=".$navigationNodeId;
if ($msg!="")
$url.="&msg=".$msg;
if ($param!="")
$url.="¶m=".$param;
}
if(dirname($_SERVER["PHP_SELF"])!="." && dirname($_SERVER["PHP_SELF"])!="/")
$dir=dirname($_SERVER["PHP_SELF"])."/";
else
$dir="/";
if($GLOBALS['CONF_AUTH_SECURE']==true){
if( (strtolower($system) == "navigationnode") && ( in_array(strtolower($navigationNodeId), $GLOBALS['SYSTEM_NODE_SECURE']) || ($GLOBALS['CONF_ALL_SECURE']==true)) )
{
return "https://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
}else{
return "http://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
}
}else{
return "http://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
}
}
/**
* Fonction formatUrl
*
* Formate l'url pour l'execution d'une methode
* @public
* @static
* @param entier identifiant de l'objet
* @param chaine nom de la classe à utiliser...
* @param chaine nom de la methode à appeler
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatté
*/
function formatUrl($oid, $className, $methodName, $msg="", $param="", $navigationNodeId=null)
{
global $SERVER_NAME, $SCRIPT_NAME, $CONF_PERSISTANT_SECURE;
if ($GLOBALS["CONF_PLUGIN_URL_REWRITE"])
{ // [Urlrewrite]
$navigationNodeId = ( (!is_null($navigationNodeId) && is_numeric($navigationNodeId))? $navigationNodeId: nid() );
$objectArray=Navigation::idToSessionCoordinationObject($oid);
$currentCode = $GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
$Node =$GLOBALS["SYSTEM_USER_SESSION"]->getNode($navigationNodeId);
$nodeName = Navigation::formatName($Node->getLibelle($currentCode));
$objName = Navigation::formatName($objectArray->getName($currentCode));
$url = $nodeName."-".$navigationNodeId."-".$objName."-".$methodName."-".$oid.".htm";
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
}else{
$url.="?abs=1";
}
if ($msg!="")
$url.="&msg=".$msg;
if ($param!="")
$url.="¶m=".$param;
}else{
$url =$GLOBALS['CONF_PAGE_EXECUTION'];
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
$url.="&oid=".$oid."&classe=".$className."&action=".$methodName;
}else{
$url.="?oid=".$oid."&classe=".$className."&action=".$methodName;
}
if ($msg!="")
$url.="&msg=".$msg;
if ($param!="")
$url.="¶m=".$param;
if ($navigationNodeId!=null && is_numeric($navigationNodeId))
$url.="&sys=nid&nid=".$navigationNodeId;
}
if(dirname($_SERVER["PHP_SELF"])!="." && dirname($_SERVER["PHP_SELF"])!="/")
$dir=dirname($_SERVER["PHP_SELF"])."/";
else
$dir="/";
if($GLOBALS['CONF_AUTH_SECURE']==true){
// var_dump(strtolower($className).".".strtolower($methodName));
// var_dump($GLOBALS['SYSTEM_CLASS_METHOD_SECURE']);
// var_dump(in_array(strtolower($className).".".strtolower($methodName), $GLOBALS['SYSTEM_CLASS_METHOD_SECURE']));
if( ($GLOBALS['CONF_ALL_SECURE']==true) || in_array(strtolower($className).".".strtolower($methodName), $GLOBALS['SYSTEM_CLASS_METHOD_SECURE']) || in_array(strtolower($className), $GLOBALS['SYSTEM_CLASS_SECURE']) || in_array($oid, $GLOBALS['SYSTEM_OID_SECURE']) || in_array($navigationNodeId, $GLOBALS['SYSTEM_NODE_SECURE']) )
{
// return "https://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
return "https://".$_SERVER['HTTP_HOST'].$dir.$url;
}else{
// return "//".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
return "//".$_SERVER['HTTP_HOST'].$dir.$url;
}
}else{
// return "//".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
return "//".$_SERVER['HTTP_HOST'].$dir.$url;
}
}
/**
* Fonction formatUrl
*
* Formate l'url pour l'execution d'une methode
* @public
* @static
* @param entier identifiant de l'objet
* @param chaine nom de la classe à utiliser...
* @param chaine nom de la methode à appeler
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatté
*/
function extUrl($url, $oid, $className, $methodName)
{
global $SERVER_NAME, $SCRIPT_NAME, $CONF_PERSISTANT_SECURE;
$navigationNodeId = nid();
if( substr($url, 0, 8) === "https://" ) {
$url = explode("https://", $url);
$url = $url[1];
} elseif( substr($url, 0, 7) === "http://" ) {
$url = explode("http://", $url);
$url = $url[1];
} else
$url = $url;
// var_dump($url);
if($GLOBALS['CONF_AUTH_SECURE']==true){
if( ($GLOBALS['CONF_ALL_SECURE']==true) || in_array(strtolower($className).strtolower($methodName), $GLOBALS['SYSTEM_CLASS_METHOD_SECURE']) || in_array(strtolower($className), $GLOBALS['SYSTEM_CLASS_SECURE']) || in_array($oid, $GLOBALS['SYSTEM_OID_SECURE']) || in_array($navigationNodeId, $GLOBALS['SYSTEM_NODE_SECURE']) )
{
// return "https://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
return "https://".$url;
}else{
// return "http://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
return "http://".$url;
}
}else{
// return "http://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
return "http://".$url;
}
}
/**
* Fonction formatUrl
*
* Formate l'url pour l'execution d'une methode
* @public
* @static
* @param entier identifiant de l'objet
* @param chaine nom de la classe à utiliser...
* @param chaine nom de la methode à appeler
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatte
*/
function absoluteUrl($msg="",$param="")
{
global $SERVER_NAME, $SCRIPT_NAME, $CONF_PERSISTANT_SECURE;
if ($GLOBALS["CONF_PLUGIN_URL_REWRITE"])
{ // [Urlrewrite]
$navigationNodeId = ( (!is_null($navigationNodeId) && is_numeric($navigationNodeId))? $navigationNodeId: nid() );
$objectArray = Navigation::idToSessionCoordinationObject(oid());
$currentCode = $GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
$Node =$GLOBALS["SYSTEM_USER_SESSION"]->getNode($navigationNodeId);
$nodeName = Navigation::formatName($Node->getLibelle($currentCode));
$objName = Navigation::formatName($objectArray->getName($currentCode));
$url = $nodeName."-".$navigationNodeId."-".$objName."-".methodName()."-".$oid.".htm";
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
}else{
$url.="?abs=1";
}
if ($msg!="")
$url.="&msg=".$msg;
if ($param!="")
$url.="¶m=".$param;
} else {
$url =$GLOBALS['CONF_PAGE_EXECUTION'];
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
}else{
$url.="?abs=1";
}
if ($msg!="")
$url.="&msg=".$msg;
if ($param!="")
$url.="¶m=".$param;
}
if(dirname($_SERVER["PHP_SELF"])!="." && dirname($_SERVER["PHP_SELF"])!="/")
$dir=dirname($_SERVER["PHP_SELF"])."/";
else
$dir="/";
if($GLOBALS['CONF_AUTH_SECURE']==true){
if( in_array(strtolower($nodeName), $GLOBALS['SYSTEM_NODE_SECURE']) || ($GLOBALS['CONF_ALL_SECURE']==true) )
{
return "https://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
}else{
return "http://".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
}
}else{
return "//".$_SERVER['HTTP_HOST'].$dir.htmlentitiesconv(unhtmlentities($url));
}
}
function protocol()
{
if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
return $protocol = 'https://';
else return $protocol = 'http://';
}
}
//
// Déclaration des fonction d'url (alias du plugin Navigation)
//
/**
* Fonction formatUrlNode
*
* Formate l'url pour la navigation dans les noeuds
* @param chaine nom de la classe à utiliser...
* @param entier identifiant de l'objet
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatté
*/
if (!function_exists("formatUrlNode")) // permet la redeclaration au niveau du plugin
{
function formatUrlNode($system, $navigationNodeId, $msg="",$param="")
{
return Navigation::formatUrlNode($system, $navigationNodeId, $msg, $param);
}
}
/**
* Fonction formatUrl
*
* Formate l'url pour l'execution d'une methode
* @param entier identifiant de l'objet
* @param chaine nom de la classe à utiliser...
* @param chaine nom de la methode à appeler
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatté
*/
if (!function_exists("formatUrl")) // permet la redeclaration aux niveau du plugin
{
function formatUrl($oid, $className, $methodName, $msg="",$param="", $navigationNodeId=null)
{
return Navigation::formatUrl($oid, $className, $methodName, $msg, $param, $navigationNodeId);
}
}
/**
* Fonction formatUrl
*
* Formate l'url pour l'execution d'une methode
* @param entier identifiant de l'objet
* @param chaine nom de la classe à utiliser...
* @param chaine nom de la methode à appeler
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatté
*/
if (!function_exists("absoluteUrl")) // permet la redeclaration aux niveau du plugin
{
function absoluteUrl($msg="",$param="")
{
return Navigation::absoluteUrl($msg, $param);
}
}
/**
* Fonction extUrl
*
* Formate l'url pour l'execution d'une methode
* @param entier identifiant de l'objet
* @param chaine nom de la classe à utiliser...
* @param chaine nom de la methode à appeler
* @param chaine identifiant du message(optionnel)...
* @return chaine url formatté
*/
if (!function_exists("extUrl")) // permet la redeclaration aux niveau du plugin
{
function extUrl($url, $oid, $className, $methodName)
{
return Navigation::extUrl($url, $oid, $className, $methodName);
}
}
if (!function_exists("protocol")) // permet la redeclaration aux niveau du plugin
{
function protocol() {
if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return $protocol = 'https://'; else return $protocol = 'http://';
}
}
?>