Qware_core/lib/object_plugin/navigation/navigation.php

567 lines
17 KiB
PHP
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**-----------------------------------------------
*
* Rooty, 2018 <rooty@rooty.me>
*
*
* 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 &copy; 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
*<P>Déclare les fonctions usuelles de gestion d'url, permettent l'activation de Https ou non</P>
* @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]
*<p>Cette methode à pour but d'être surchagée par le plugin<br>
*pour être executée avant l'initialisation du system</p>
* @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]
*<p>Cette methode à pour but d'être surchagée par le plugin<br>
*pour être executée avant l'execution system</p>
* @abstract
* @access public
* @return booleen
*/
function __beforeProcess()
{
if(isset($_GET["oid"]) && is_numeric($_GET["oid"]))
$_GET["classe"]=get_class(Navigation::idToSessionCoordinationObject($_GET["oid"]));
}
public static function idToSessionCoordinationObject($id)
{
if (is_numeric($id) && is_array($GLOBALS["SYSTEM_CONTROL"]->objectArray)){
for($i=0;$i<count($GLOBALS["SYSTEM_CONTROL"]->objectArray);$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 <br/>
* 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]
*<p>formate une chaîne (node||CoordinationObject)</p>
*
*@return chaine
*@desc chaine chaine sans caractére spéciaux
*/
public static 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."<br>";
$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."<br>";
$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é
*/
public static 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.="&amp;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";
}
$url.="&amp;sys=".$system."&amp;nid=".$navigationNodeId;
if ($msg!="")
$url.="&amp;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( (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é
*/
public static function formatUrl($oid, $className, $methodName, $msg="", $param="", $navigationNodeId=null, $urlparam=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.="&amp;msg=".$msg;
if ($param!="")
$url.="&param=".$param;
if ($urlparam!="")
$url.="&".$urlparam;
}else{
$url =$GLOBALS['CONF_PAGE_EXECUTION'];
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
$url.="&amp;oid=".$oid."&amp;classe=".$className."&amp;action=".$methodName;
}else{
$url.="?oid=".$oid."&amp;classe=".$className."&amp;action=".$methodName;
}
if ($msg!="")
$url.="&amp;msg=".$msg;
if ($param!="")
$url.="&param=".$param;
if ($navigationNodeId!=null && is_numeric($navigationNodeId))
$url.="&amp;sys=nid&amp;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.="&amp;msg=".$msg;
if ($param!="")
$url.="&amp;param=".$param;
} else {
$url =$GLOBALS['CONF_PAGE_EXECUTION'];
if($GLOBALS['CONF_URL_KEY']){
$url =addIdToUrl($url);
}else{
$url.="?abs=1";
}
if ($msg!="")
$url.="&amp;msg=".$msg;
if ($param!="")
$url.="&amp;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://';
}
}
?>