* * * 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.="&param=".$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.="&param=".$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://'; } } ?>