2016-01-24 21:17:11 +01:00
< ? php
2017-02-24 21:13:40 +01:00
/* Copyright ( C ) 2016 - 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
2016-01-24 21:17:11 +01:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* 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 . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2020-02-21 11:36:16 +01:00
*
* Note about $_SERVER :
* REQUEST_URI : / test / before_rewrite / script . php / path / info ? q = helloword
* PHP_SELF : / test / after_rewrite / script . php / path / info
* QUERY_STRING : q = helloword
* SCRIPT_NAME : / test / after_rewrite / script . php
* PATH_INFO : / path / info
* SCRIPT_FILENAME : / var / www / test / php / script . php
* __FILE__ : / var / www / test / php / script_included . php
2016-01-24 21:17:11 +01:00
*/
/**
2017-10-20 23:48:42 +02:00
* \file htdocs / public / website / index . php
2016-08-08 14:21:43 +02:00
* \ingroup website
2018-10-14 18:44:29 +02:00
* \brief Wrapper to output pages when website is powered by Dolibarr instead of a native web server
2016-01-24 21:17:11 +01:00
*/
2021-02-26 18:58:34 +01:00
if ( ! defined ( 'NOTOKENRENEWAL' )) {
define ( 'NOTOKENRENEWAL' , 1 ); // Disables token renewal
}
if ( ! defined ( 'NOLOGIN' )) {
define ( " NOLOGIN " , 1 );
}
if ( ! defined ( 'NOCSRFCHECK' )) {
define ( " NOCSRFCHECK " , 1 ); // We accept to go on this page from external web site.
}
if ( ! defined ( 'NOREQUIREMENU' )) {
define ( 'NOREQUIREMENU' , '1' );
}
if ( ! defined ( 'NOREQUIREHTML' )) {
define ( 'NOREQUIREHTML' , '1' );
}
if ( ! defined ( 'NOREQUIREAJAX' )) {
define ( 'NOREQUIREAJAX' , '1' );
}
if ( ! defined ( 'NOIPCHECK' )) {
define ( 'NOIPCHECK' , '1' ); // Do not check IP defined into conf $dolibarr_main_restrict_ip
}
if ( ! defined ( 'NOBROWSERNOTIF' )) {
define ( 'NOBROWSERNOTIF' , '1' );
}
2016-05-01 16:34:50 +02:00
/**
* Header empty
*
* @ return void
*/
2018-08-15 14:28:34 +02:00
function llxHeader ()
{
}
2016-05-01 16:34:50 +02:00
/**
* Footer empty
*
* @ return void
*/
2018-08-15 14:28:34 +02:00
function llxFooter ()
{
}
2016-05-01 16:34:50 +02:00
2016-01-24 21:17:11 +01:00
require '../../master.inc.php' ;
2016-05-01 16:34:50 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2020-04-10 10:59:32 +02:00
$error = 0 ;
$websitekey = GETPOST ( 'website' , 'alpha' );
$pageid = GETPOST ( 'page' , 'alpha' ) ? GETPOST ( 'page' , 'alpha' ) : GETPOST ( 'pageid' , 'alpha' );
$pageref = GETPOST ( 'pageref' , 'alphanohtml' ) ? GETPOST ( 'pageref' , 'alphanohtml' ) : '' ;
2016-05-01 16:34:50 +02:00
$accessallowed = 1 ;
2020-04-10 10:59:32 +02:00
$type = '' ;
2016-05-01 16:34:50 +02:00
2021-02-26 18:58:34 +01:00
if ( empty ( $pageid )) {
2018-10-14 18:44:29 +02:00
require_once DOL_DOCUMENT_ROOT . '/website/class/website.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/website/class/websitepage.class.php' ;
2017-07-03 02:09:14 +02:00
2020-04-10 10:59:32 +02:00
$object = new Website ( $db );
2018-10-14 18:44:29 +02:00
$object -> fetch ( 0 , $websitekey );
2017-07-21 02:30:02 +02:00
2021-02-26 18:58:34 +01:00
if ( empty ( $object -> id )) {
if ( empty ( $pageid )) {
2018-10-14 18:44:29 +02:00
// Return header 404
header ( $_SERVER [ " SERVER_PROTOCOL " ] . " 404 Not Found " , true , 404 );
include DOL_DOCUMENT_ROOT . '/public/error-404.php' ;
exit ;
}
}
2020-04-10 10:59:32 +02:00
$objectpage = new WebsitePage ( $db );
2018-10-14 18:44:29 +02:00
2021-02-26 18:58:34 +01:00
if ( $pageref ) {
2020-04-10 10:59:32 +02:00
$result = $objectpage -> fetch ( 0 , $object -> id , $pageref );
2021-02-26 18:58:34 +01:00
if ( $result > 0 ) {
2018-10-14 18:44:29 +02:00
$pageid = $objectpage -> id ;
2021-02-26 18:58:34 +01:00
} elseif ( $result == 0 ) {
2018-10-14 18:44:29 +02:00
// Page not found from ref=pageurl, we try using alternative alias
2020-04-10 10:59:32 +02:00
$result = $objectpage -> fetch ( 0 , $object -> id , null , $pageref );
2021-02-26 18:58:34 +01:00
if ( $result > 0 ) {
2018-10-14 18:44:29 +02:00
$pageid = $objectpage -> id ;
}
}
2020-05-21 15:05:19 +02:00
} else {
2021-02-26 18:58:34 +01:00
if ( $object -> fk_default_home > 0 ) {
2020-04-10 10:59:32 +02:00
$result = $objectpage -> fetch ( $object -> fk_default_home );
2021-02-26 18:58:34 +01:00
if ( $result > 0 ) {
2018-10-14 18:44:29 +02:00
$pageid = $objectpage -> id ;
}
}
2021-02-26 18:58:34 +01:00
if ( empty ( $pageid )) {
2020-04-10 10:59:32 +02:00
$array = $objectpage -> fetchAll ( $object -> id ); // TODO Can filter on container of type pages only ?
2021-02-26 18:58:34 +01:00
if ( is_array ( $array ) && count ( $array ) > 0 ) {
2020-04-10 10:59:32 +02:00
$firstrep = reset ( $array );
$pageid = $firstrep -> id ;
2018-10-14 18:44:29 +02:00
}
}
}
2016-05-01 21:19:29 +02:00
}
2021-02-26 18:58:34 +01:00
if ( empty ( $pageid )) {
2018-10-14 18:44:29 +02:00
// Return header 404
header ( $_SERVER [ " SERVER_PROTOCOL " ] . " 404 Not Found " , true , 404 );
2017-07-03 02:09:14 +02:00
2018-10-14 18:44:29 +02:00
$langs -> load ( " website " );
2018-07-20 15:01:50 +02:00
2021-02-26 18:58:34 +01:00
if ( ! GETPOSTISSET ( 'pageref' )) {
print $langs -> trans ( " PreviewOfSiteNotYetAvailable " , $websitekey );
}
2017-07-03 02:09:14 +02:00
2018-10-14 18:44:29 +02:00
include DOL_DOCUMENT_ROOT . '/public/error-404.php' ;
exit ;
2016-05-07 16:38:32 +02:00
}
2016-05-01 16:34:50 +02:00
2020-04-10 10:59:32 +02:00
$appli = constant ( 'DOL_APPLICATION_TITLE' );
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> MAIN_APPLICATION_TITLE )) {
$appli = $conf -> global -> MAIN_APPLICATION_TITLE ;
}
2018-10-14 18:44:29 +02:00
/*
* View
*/
//print 'Directory with '.$appli.' websites.<br>';
2016-05-01 16:34:50 +02:00
// Security: Delete string ../ into $original_file
global $dolibarr_main_data_root ;
2021-02-26 18:58:34 +01:00
if ( $pageid == 'css' ) { // No more used ?
2020-03-23 15:54:02 +01:00
header ( 'Content-type: text/css' );
// Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access.
//if (empty($dolibarr_nocache)) header('Cache-Control: max-age=3600, public, must-revalidate');
//else
header ( 'Cache-Control: no-cache' );
2022-04-25 10:14:30 +02:00
$original_file = $dolibarr_main_data_root . ( $conf -> entity > 1 ? '/' . $conf -> entity : '' ) . '/website/' . $websitekey . '/styles.css.php' ;
2020-05-21 15:05:19 +02:00
} else {
2022-04-25 10:14:30 +02:00
$original_file = $dolibarr_main_data_root . ( $conf -> entity > 1 ? '/' . $conf -> entity : '' ) . '/website/' . $websitekey . '/page' . $pageid . '.tpl.php' ;
2016-05-01 16:34:50 +02:00
}
// Find the subdirectory name as the reference
2020-04-10 10:59:32 +02:00
$refname = basename ( dirname ( $original_file ) . " / " );
2016-05-01 16:34:50 +02:00
// Security:
// Limite acces si droits non corrects
2021-02-26 18:58:34 +01:00
if ( ! $accessallowed ) {
2020-03-23 15:54:02 +01:00
accessforbidden ();
2016-05-01 16:34:50 +02:00
}
// Security:
// On interdit les remontees de repertoire ainsi que les pipe dans
// les noms de fichiers.
2021-02-26 18:58:34 +01:00
if ( preg_match ( '/\.\./' , $original_file ) || preg_match ( '/[<>|]/' , $original_file )) {
2020-03-23 15:54:02 +01:00
dol_syslog ( " Refused to deliver file " . $original_file );
2020-04-10 10:59:32 +02:00
$file = basename ( $original_file ); // Do no show plain path of original_file in shown error message
2020-03-23 15:54:02 +01:00
dol_print_error ( 0 , $langs -> trans ( " ErrorFileNameInvalid " , $file ));
exit ;
2016-05-01 16:34:50 +02:00
}
clearstatcache ();
$filename = basename ( $original_file );
// Output file on browser
dol_syslog ( " index.php include $original_file $filename content-type= $type " );
2020-04-10 10:59:32 +02:00
$original_file_osencoded = dol_osencode ( $original_file ); // New file name encoded in OS encoding charset
2016-05-01 16:34:50 +02:00
// This test if file exists should be useless. We keep it to find bug more easily
2021-02-26 18:58:34 +01:00
if ( ! file_exists ( $original_file_osencoded )) {
2020-03-23 15:54:02 +01:00
// Return header 404
header ( $_SERVER [ " SERVER_PROTOCOL " ] . " 404 Not Found " , true , 404 );
2017-07-03 02:09:14 +02:00
2020-03-23 15:54:02 +01:00
$langs -> load ( " website " );
print $langs -> trans ( " RequestedPageHasNoContentYet " , $pageid );
2017-07-03 02:09:14 +02:00
2020-03-23 15:54:02 +01:00
include DOL_DOCUMENT_ROOT . '/public/error-404.php' ;
exit ;
2016-05-01 16:34:50 +02:00
}
2016-08-08 14:21:43 +02:00
// Output page content
2016-09-16 01:00:24 +02:00
define ( 'USEDOLIBARRSERVER' , 1 );
2017-08-21 04:17:28 +02:00
print '<!-- Page content ' . $original_file . ' rendered with DOLIBARR SERVER : Html with CSS link and html header + Body that was saved into tpl dir -->' . " \n " ;
2020-04-10 10:59:32 +02:00
include_once $original_file_osencoded ; // Note: The pageXXX.tpl.php showed here contains a formatage with dolWebsiteOutput() at end of page.
2016-08-08 14:21:43 +02:00
2021-02-26 18:58:34 +01:00
if ( is_object ( $db )) {
$db -> close ();
}