2016-01-24 21:35:41 +01:00
< ? php
2018-09-09 14:05:23 +02:00
/* Copyright ( C ) 2016 - 2018 Laurent Destailleur < eldy @ users . sourceforge . net >
2016-01-24 21:35:41 +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
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
/**
2016-05-01 19:49:03 +02:00
* \file htdocs / website / index . php
2016-02-02 16:24:12 +01:00
* \ingroup website
2016-05-01 19:49:03 +02:00
* \brief Page to website view / edit
2016-01-24 21:35:41 +01:00
*/
2019-01-27 11:55:16 +01:00
define ( 'NOSCANPOSTFORINJECTION' , 1 );
define ( 'NOSTYLECHECK' , 1 );
2019-08-13 05:22:49 +02:00
define ( 'USEDOLIBARREDITOR' , 1 );
2016-05-01 19:49:03 +02:00
2019-01-04 19:10:25 +01:00
header ( 'X-XSS-Protection:0' );
2016-01-24 21:35:41 +01:00
require '../main.inc.php' ;
2016-02-02 16:24:12 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php' ;
2016-05-01 16:34:50 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2017-08-21 03:13:44 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/website.lib.php' ;
2019-08-12 22:19:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/website2.lib.php' ;
2017-07-19 16:38:00 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php' ;
2017-07-22 20:01:29 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formadmin.class.php' ;
2017-07-23 16:20:53 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formwebsite.class.php' ;
2018-02-19 19:47:42 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php' ;
2017-10-20 21:39:19 +02:00
require_once DOL_DOCUMENT_ROOT . '/website/class/website.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/website/class/websitepage.class.php' ;
2016-02-02 16:24:12 +01:00
2019-01-23 15:06:28 +01:00
$langs -> loadLangs ( array ( " admin " , " other " , " website " , " errors " ));
2016-02-02 16:24:12 +01:00
2018-11-14 13:58:00 +01:00
if ( ! $user -> rights -> website -> read ) accessforbidden ();
2016-02-02 16:24:12 +01:00
2019-04-03 13:26:50 +02:00
$conf -> dol_hide_leftmenu = 1 ; // Force hide of left menu.
2016-04-19 11:02:55 +02:00
$error = 0 ;
2018-07-22 17:18:35 +02:00
$websitekey = GETPOST ( 'website' , 'alpha' );
2016-04-19 11:02:55 +02:00
$page = GETPOST ( 'page' , 'alpha' );
2016-05-01 19:49:03 +02:00
$pageid = GETPOST ( 'pageid' , 'int' );
2017-07-21 02:30:02 +02:00
$pageref = GETPOST ( 'pageref' , 'aZ09' );
2019-01-27 11:55:16 +01:00
$action = GETPOST ( 'action' , 'aZ09' );
$confirm = GETPOST ( 'confirm' , 'alpha' );
$cancel = GETPOST ( 'cancel' , 'alpha' );
2017-11-18 15:41:30 +01:00
2017-12-02 13:24:21 +01:00
$type_container = GETPOST ( 'WEBSITE_TYPE_CONTAINER' , 'alpha' );
2017-11-18 15:41:30 +01:00
$section_dir = GETPOST ( 'section_dir' , 'alpha' );
$file_manager = GETPOST ( 'file_manager' , 'alpha' );
2019-05-28 16:10:11 +02:00
$replacesite = GETPOST ( 'replacesite' , 'alpha' );
2016-02-02 16:24:12 +01:00
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'deletesite' , 'alpha' )) { $action = 'deletesite' ; }
if ( GETPOST ( 'delete' , 'alpha' )) { $action = 'delete' ; }
if ( GETPOST ( 'preview' , 'alpha' )) $action = 'preview' ;
if ( GETPOST ( 'createsite' , 'alpha' )) { $action = 'createsite' ; }
if ( GETPOST ( 'createcontainer' , 'alpha' )) { $action = 'createcontainer' ; }
if ( GETPOST ( 'editcss' , 'alpha' )) { $action = 'editcss' ; }
if ( GETPOST ( 'editmenu' , 'alpha' )) { $action = 'editmenu' ; }
if ( GETPOST ( 'setashome' , 'alpha' )) { $action = 'setashome' ; }
if ( GETPOST ( 'editmeta' , 'alpha' )) { $action = 'editmeta' ; }
if ( GETPOST ( 'editsource' , 'alpha' )) { $action = 'editsource' ; }
if ( GETPOST ( 'editcontent' , 'alpha' )) { $action = 'editcontent' ; }
if ( GETPOST ( 'exportsite' , 'alpha' )) { $action = 'exportsite' ; }
if ( GETPOST ( 'importsite' , 'alpha' )) { $action = 'importsite' ; }
if ( GETPOST ( 'createfromclone' , 'alpha' )) { $action = 'createfromclone' ; }
if ( GETPOST ( 'createpagefromclone' , 'alpha' )) { $action = 'createpagefromclone' ; }
2017-11-18 15:41:30 +01:00
if ( empty ( $action ) && $file_manager ) $action = 'file_manager' ;
2019-05-28 16:10:11 +02:00
if ( empty ( $action ) && $replacesite ) $action = 'replacesite' ;
2016-04-19 11:02:55 +02:00
2017-11-10 13:45:38 +01:00
// Load variable for pagination
2019-01-27 11:55:16 +01:00
$limit = GETPOST ( 'limit' , 'int' ) ? GETPOST ( 'limit' , 'int' ) : $conf -> liste_limit ;
$sortfield = GETPOST ( " sortfield " , 'alpha' );
$sortorder = GETPOST ( " sortorder " , 'alpha' );
$page = GETPOST ( " page " , 'int' );
2017-11-10 13:45:38 +01:00
if ( empty ( $page ) || $page == - 1 ) { $page = 0 ; } // If $page is not defined, or '' or -1
$offset = $limit * $page ;
$pageprev = $page - 1 ;
$pagenext = $page + 1 ;
//if (! $sortfield) $sortfield='name';
//if (! $sortorder) $sortorder='ASC';
2016-04-19 11:02:55 +02:00
if ( empty ( $action )) $action = 'preview' ;
2016-01-24 21:35:41 +01:00
2016-04-12 19:17:50 +02:00
$object = new Website ( $db );
2016-04-19 11:02:55 +02:00
$objectpage = new WebsitePage ( $db );
2016-02-02 16:24:12 +01:00
2018-10-01 13:09:12 +02:00
$object -> fetchAll (); // Init $object->records with list of websites
2016-04-29 20:35:38 +02:00
// If website not defined, we take first found
2018-07-22 17:18:35 +02:00
if ( empty ( $websitekey ))
2016-04-29 20:35:38 +02:00
{
2017-10-07 13:09:31 +02:00
foreach ( $object -> records as $key => $valwebsite )
{
2018-07-22 17:18:35 +02:00
$websitekey = $valwebsite -> ref ;
2017-10-07 13:09:31 +02:00
break ;
}
2016-04-29 20:35:38 +02:00
}
2018-07-22 17:18:35 +02:00
if ( $websitekey )
2016-04-23 21:34:10 +02:00
{
2018-07-22 17:18:35 +02:00
$res = $object -> fetch ( 0 , $websitekey );
2016-04-23 21:34:10 +02:00
}
2018-07-22 17:18:35 +02:00
$website = $object ;
2016-05-01 19:49:03 +02:00
2018-09-24 17:12:51 +02:00
// Check pageid received as aprameter
if ( $pageid < 0 ) $pageid = 0 ;
if (( $pageid > 0 || $pageref ) && $action != 'addcontainer' )
{
$res = $objectpage -> fetch ( $pageid , ( $object -> id > 0 ? $object -> id : null ), $pageref );
2019-02-05 15:15:41 +01:00
if ( $res == 0 )
{
$res = $objectpage -> fetch ( $pageid , ( $object -> id > 0 ? $object -> id : null ), null , $pageref );
}
2018-09-24 17:12:51 +02:00
// Check if pageid is inside the new website, if not we reset param pageid
if ( $res >= 0 && $object -> id > 0 )
{
2018-10-01 13:09:12 +02:00
if ( $objectpage -> fk_website != $object -> id ) // We have a bad page that does not belong to web site
2018-09-24 17:12:51 +02:00
{
2018-10-01 13:09:12 +02:00
if ( $object -> fk_default_home > 0 )
2018-09-24 17:12:51 +02:00
{
2018-10-01 13:09:12 +02:00
$res = $objectpage -> fetch ( $object -> fk_default_home , $object -> id , '' ); // We search first page of web site
if ( $res > 0 ) $pageid = $object -> fk_default_home ;
2018-09-24 17:12:51 +02:00
}
2018-10-01 13:09:12 +02:00
else
2018-09-24 17:12:51 +02:00
{
2018-10-01 13:09:12 +02:00
$res = $objectpage -> fetch ( 0 , $object -> id , '' ); // We search first page of web site
if ( $res == 0 ) // Page was not found, we reset it
{
$objectpage = new WebsitePage ( $db );
}
else // We found a page, we set pageid to it.
{
$pageid = $objectpage -> id ;
}
2018-09-24 17:12:51 +02:00
}
}
else // We have a valid page. We force pageid for the case we got the page with a fetch on ref.
{
$pageid = $objectpage -> id ;
}
}
}
// Define pageid if pageid and pageref not received as parameter or was wrong
2018-09-24 15:14:32 +02:00
if ( empty ( $pageid ) && empty ( $pageref ) && $object -> id > 0 && $action != 'createcontainer' )
{
$pageid = $object -> fk_default_home ;
if ( empty ( $pageid ))
{
$array = $objectpage -> fetchAll ( $object -> id , 'ASC,ASC' , 'type_container,pageurl' );
if ( ! is_array ( $array ) && $array < 0 ) dol_print_error ( '' , $objectpage -> error , $objectpage -> errors );
$atleastonepage = ( is_array ( $array ) && count ( $array ) > 0 );
$firstpageid = 0 ; $homepageid = 0 ;
foreach ( $array as $key => $valpage )
{
if ( empty ( $firstpageid )) $firstpageid = $valpage -> id ;
if ( $object -> fk_default_home && $key == $object -> fk_default_home ) $homepageid = $valpage -> id ;
}
$pageid = ( $homepageid ? $homepageid : $firstpageid ); // We choose home page and if not defined yet, we take first page
}
}
2016-04-23 21:34:10 +02:00
2016-05-01 16:34:50 +02:00
global $dolibarr_main_data_root ;
2018-07-22 17:18:35 +02:00
$pathofwebsite = $dolibarr_main_data_root . '/website/' . $websitekey ;
2017-07-20 20:05:49 +02:00
$filehtmlheader = $pathofwebsite . '/htmlheader.html' ;
2016-08-08 14:21:43 +02:00
$filecss = $pathofwebsite . '/styles.css.php' ;
2017-10-07 03:08:01 +02:00
$filejs = $pathofwebsite . '/javascript.js.php' ;
2017-07-23 17:44:26 +02:00
$filerobot = $pathofwebsite . '/robots.txt' ;
$filehtaccess = $pathofwebsite . '/.htaccess' ;
2016-05-01 16:34:50 +02:00
$filetpl = $pathofwebsite . '/page' . $pageid . '.tpl.php' ;
2016-08-08 18:25:37 +02:00
$fileindex = $pathofwebsite . '/index.php' ;
2018-09-09 14:05:23 +02:00
$filewrapper = $pathofwebsite . '/wrapper.php' ;
2019-08-12 17:34:18 +02:00
$filemanifestjson = $pathofwebsite . '/manifest.json.php' ;
2019-08-15 00:55:47 +02:00
$filereadme = $pathofwebsite . '/README.md' ;
2016-05-01 16:34:50 +02:00
2016-05-07 16:38:32 +02:00
// Define $urlwithroot
2019-01-27 11:55:16 +01:00
$urlwithouturlroot = preg_replace ( '/' . preg_quote ( DOL_URL_ROOT , '/' ) . '$/i' , '' , trim ( $dolibarr_main_url_root ));
2016-05-07 16:38:32 +02:00
$urlwithroot = $urlwithouturlroot . DOL_URL_ROOT ; // This is to use external domain name found into config file
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
2016-05-01 16:34:50 +02:00
2017-11-18 15:41:30 +01:00
$permtouploadfile = $user -> rights -> website -> write ;
$diroutput = $conf -> medias -> multidir_output [ $conf -> entity ];
$relativepath = $section_dir ;
$upload_dir = $diroutput . '/' . $relativepath ;
2018-01-08 12:31:11 +01:00
$htmlheadercontentdefault = '' ;
$htmlheadercontentdefault .= '<link rel="stylesheet" id="google-fonts-css" href="//fonts.googleapis.com/css?family=Open+Sans:300,400,700" />' . " \n " ;
2018-01-08 12:41:22 +01:00
$htmlheadercontentdefault .= '<link rel="stylesheet" id="font-wasesome-css" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />' . " \n " ;
$htmlheadercontentdefault .= '<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>' . " \n " ;
$htmlheadercontentdefault .= '<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>' . " \n " ;
2018-01-08 12:31:11 +01:00
$htmlheadercontentdefault .= '<script src="//cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>' . " \n " ;
$htmlheadercontentdefault .= '<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.13.0/umd/popper.min.js"></script>' . " \n " ;
$htmlheadercontentdefault .= '<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script>' . " \n " ;
2018-07-19 16:06:06 +02:00
$htmlheadercontentdefault .= '<!--' . " \n " ;
$htmlheadercontentdefault .= '<script src="/document.php?modulepart=medias&file=css/myfile.css"></script>' . " \n " ;
2018-02-20 18:10:11 +01:00
$htmlheadercontentdefault .= '<script src="/document.php?modulepart=medias&file=js/myfile.js"></script>' . " \n " ;
2018-07-19 16:06:06 +02:00
$htmlheadercontentdefault .= '-->' . " \n " ;
2018-01-02 17:27:05 +01:00
2019-08-12 17:34:18 +02:00
$manifestjsoncontentdefault = '' ;
$manifestjsoncontentdefault .= ' {
" name " : " MyWebsite " ,
" short_name " : " MyWebsite " ,
" start_url " : " / " ,
" lang " : " en-US " ,
" display " : " standalone " ,
" background_color " : " #fff " ,
" description " : " A simple Web app. " ,
" icons " : [{
" src " : " images/'. $website->ref .'/homescreen48.png " ,
" sizes " : " 48x48 " ,
" type " : " image/png "
}, {
" src " : " image/'. $website->ref .'/homescreen72.png " ,
" sizes " : " 72x72 " ,
" type " : " image/png "
}, {
" src " : " image/'. $website->ref .'/homescreen96.png " ,
" sizes " : " 96x96 " ,
" type " : " image/png "
}, {
" src " : " image/'. $website->ref .'/homescreen144.png " ,
" sizes " : " 144x144 " ,
" type " : " image/png "
}, {
" src " : " image/'. $website->ref .'/homescreen168.png " ,
" sizes " : " 168x168 " ,
" type " : " image/png "
}, {
" src " : " image/'. $website->ref .'/homescreen192.png " ,
" sizes " : " 192x192 " ,
" type " : " image/png "
}],
" related_applications " : [{
" platform " : " play " ,
" url " : " https://play.google.com/store/apps/details?id=com.nltechno.dolidroidpro "
}]
} ' ;
2017-11-18 15:41:30 +01:00
2016-02-02 16:24:12 +01:00
/*
* Actions
*/
2019-04-05 11:34:06 +02:00
// Protections
if ( $action == 'updatesource' && ( GETPOST ( 'refreshsite_x' ) || GETPOST ( 'refreshsite.x' ) || GETPOST ( 'refreshpage_x' ) || GETPOST ( 'refreshpage.x' )))
{
$action = 'preview' ; // To avoid to update another page or another site when we click on button to select another site or page.
}
if ( GETPOST ( 'refreshsite' , 'alpha' )) // If we change the site, we reset the pageid and cancel addsite action.
{
$pageid = 0 ;
if ( $action == 'addsite' ) $action = 'preview' ;
if ( $action == 'updatesource' ) $action = 'preview' ;
}
if ( GETPOST ( 'refreshpage' , 'alpha' ) && ! in_array ( $action , array ( 'updatecss' ))) $action = 'preview' ;
2019-01-27 11:55:16 +01:00
$backtopage = $_SERVER [ " PHP_SELF " ] . '?file_manager=1&website=' . $websitekey . '&pageid=' . $pageid . ( GETPOST ( 'section_dir' , 'alpha' ) ? '§ion_dir=' . urlencode ( GETPOST ( 'section_dir' , 'alpha' )) : '' ); // used after a confirm_deletefile into actions_linkedfiles.inc.php
2017-11-18 15:41:30 +01:00
include DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php' ;
if ( $action == 'renamefile' ) $action = 'file_manager' ; // After actions_linkedfiles, if action were renamefile, we set it to 'file_manager'
2018-07-20 15:01:50 +02:00
if ( $action == 'seteditinline' )
{
dolibarr_set_const ( $db , 'WEBSITE_EDITINLINE' , 1 );
2018-09-24 15:38:13 +02:00
setEventMessages ( $langs -> trans ( " FeatureNotYetAvailable " ), null , 'warnings' );
2018-11-23 10:53:04 +01:00
dolibarr_set_const ( $db , 'WEBSITE_SUBCONTAINERSINLINE' , 0 ); // Force disable of 'Include dynamic content'
2019-01-27 11:55:16 +01:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . GETPOST ( 'website' , 'alphanohtml' ) . '&pageid=' . GETPOST ( 'pageid' , 'int' ));
2018-07-20 15:01:50 +02:00
exit ;
}
if ( $action == 'unseteditinline' )
{
dolibarr_del_const ( $db , 'WEBSITE_EDITINLINE' );
2019-01-27 11:55:16 +01:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . GETPOST ( 'website' , 'alphanohtml' ) . '&pageid=' . GETPOST ( 'pageid' , 'int' ));
2018-09-10 19:36:46 +02:00
exit ;
}
if ( $action == 'setshowsubcontainers' )
{
dolibarr_set_const ( $db , 'WEBSITE_SUBCONTAINERSINLINE' , 1 );
dolibarr_set_const ( $db , 'WEBSITE_EDITINLINE' , 0 ); // Force disable of edit inline
2019-01-27 11:55:16 +01:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . GETPOST ( 'website' , 'alphanohtml' ) . '&pageid=' . GETPOST ( 'pageid' , 'int' ));
2018-09-10 19:36:46 +02:00
exit ;
}
if ( $action == 'unsetshowsubcontainers' )
{
dolibarr_del_const ( $db , 'WEBSITE_SUBCONTAINERSINLINE' );
2019-01-27 11:55:16 +01:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . GETPOST ( 'website' , 'alphanohtml' ) . '&pageid=' . GETPOST ( 'pageid' , 'int' ));
2018-07-20 15:01:50 +02:00
exit ;
}
2019-08-13 00:34:42 +02:00
if (( $action == 'replacesite' || $action == 'replacesiteconfirm' ) && empty ( GETPOST ( 'searchstring' )))
{
$action = 'replacesite' ;
}
2017-11-18 15:41:30 +01:00
// Add directory
2017-12-02 13:24:21 +01:00
/*
if ( $action == 'adddir' && $permtouploadfile )
2017-11-18 15:41:30 +01:00
{
$ecmdir -> ref = 'NOTUSEDYET' ;
$ecmdir -> label = GETPOST ( " label " );
$ecmdir -> description = GETPOST ( " desc " );
//$id = $ecmdir->create($user);
if ( $id > 0 )
{
header ( " Location: " . $_SERVER [ " PHP_SELF " ]);
exit ;
}
else
{
setEventMessages ( 'Error ' . $langs -> trans ( $ecmdir -> error ), null , 'errors' );
2017-12-12 01:40:34 +01:00
$action = " createcontainer " ;
2017-11-18 15:41:30 +01:00
}
clearstatcache ();
}
2017-12-02 13:24:21 +01:00
*/
2017-11-18 15:41:30 +01:00
2017-09-01 12:19:55 +02:00
// Add site
if ( $action == 'addsite' )
{
$db -> begin ();
2019-08-14 01:43:06 +02:00
if ( GETPOST ( 'virtualhost' , 'alpha' ) && ! preg_match ( '/^http/' , GETPOST ( 'virtualhost' , 'alpha' )))
2019-01-23 15:06:28 +01:00
{
$error ++ ;
setEventMessages ( $langs -> trans ( 'ErrorURLMustStartWithHttp' , $langs -> transnoentitiesnoconv ( " VirtualHost " )), null , 'errors' );
}
2019-01-27 11:55:16 +01:00
if ( ! $error && ! GETPOST ( 'WEBSITE_REF' , 'alpha' ))
2017-09-01 12:19:55 +02:00
{
$error ++ ;
2018-08-20 19:10:33 +02:00
$langs -> load ( " errors " );
2017-09-01 12:19:55 +02:00
setEventMessages ( $langs -> transnoentities ( " ErrorFieldRequired " , $langs -> transnoentities ( " Ref " )), null , 'errors' );
}
2019-01-27 11:55:16 +01:00
if ( ! $error && ! preg_match ( '/^[a-z0-9_\-\.]+$/i' , GETPOST ( 'WEBSITE_REF' , 'alpha' )))
2017-09-01 12:19:55 +02:00
{
$error ++ ;
2018-02-19 16:46:29 +01:00
$langs -> load ( " errors " );
2017-09-01 12:19:55 +02:00
setEventMessages ( $langs -> transnoentities ( " ErrorFieldCanNotContainSpecialCharacters " , $langs -> transnoentities ( " Ref " )), null , 'errors' );
}
if ( ! $error )
{
$tmpobject = new Website ( $db );
2019-01-27 11:55:16 +01:00
$tmpobject -> ref = GETPOST ( 'WEBSITE_REF' , 'alpha' );
$tmpobject -> description = GETPOST ( 'WEBSITE_DESCRIPTION' , 'alpha' );
$tmpobject -> virtualhost = GETPOST ( 'virtualhost' , 'alpha' );
2017-09-01 12:19:55 +02:00
$result = $tmpobject -> create ( $user );
if ( $result <= 0 )
{
$error ++ ;
setEventMessages ( $tmpobject -> error , $tmpobject -> errors , 'errors' );
}
}
if ( ! $error )
{
$db -> commit ();
setEventMessages ( $langs -> trans ( " SiteAdded " , $object -> ref ), null , 'mesgs' );
$action = '' ;
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . $tmpobject -> ref );
exit ;
}
else
{
$db -> rollback ();
$action = 'createsite' ;
}
if ( ! $error )
{
$action = 'preview' ;
$id = $object -> id ;
}
}
2017-12-12 01:40:34 +01:00
// Add page/container
if ( $action == 'addcontainer' )
2016-04-23 21:34:10 +02:00
{
2017-10-13 15:23:24 +02:00
dol_mkdir ( $pathofwebsite );
2017-10-07 13:09:31 +02:00
$db -> begin ();
$objectpage -> fk_website = $object -> id ;
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'fetchexternalurl' , 'alpha' ))
2017-10-07 13:09:31 +02:00
{
2019-01-27 11:55:16 +01:00
$urltograb = GETPOST ( 'externalurl' , 'alpha' );
$grabimages = GETPOST ( 'grabimages' , 'alpha' );
$grabimagesinto = GETPOST ( 'grabimagesinto' , 'alpha' );
2018-02-19 14:56:37 +01:00
//var_dump($grabimages);exit;
2017-10-07 13:09:31 +02:00
}
if ( $urltograb )
{
2017-12-10 17:59:19 +01:00
include_once DOL_DOCUMENT_ROOT . '/core/lib/geturl.lib.php' ;
2019-08-14 01:43:06 +02:00
//if (! preg_match('/^http/', $urltograb) && ! preg_match('/^file/', $urltograb))
2018-11-30 14:30:00 +01:00
if ( ! preg_match ( '/^http/' , $urltograb ))
2017-10-07 02:29:27 +02:00
{
2018-11-30 14:30:00 +01:00
$error ++ ;
2019-01-23 15:06:28 +01:00
$langs -> load ( " errors " );
2018-11-30 14:30:00 +01:00
setEventMessages ( 'Error URL must start with http:// or https://' , null , 'errors' );
$action = 'createcontainer' ;
2017-10-07 02:29:27 +02:00
}
2018-11-30 14:30:00 +01:00
if ( ! $error )
{
// Clean url to grab, so url can be
// http://www.example.com/ or http://www.example.com/dir1/ or http://www.example.com/dir1/aaa
$urltograbwithoutdomainandparam = preg_replace ( '/^https?:\/\/[^\/]+\/?/i' , '' , $urltograb );
2019-08-14 01:43:06 +02:00
//$urltograbwithoutdomainandparam = preg_replace('/^file:\/\/[^\/]+\/?/i', '', $urltograb);
2018-11-30 14:30:00 +01:00
$urltograbwithoutdomainandparam = preg_replace ( '/\?.*$/' , '' , $urltograbwithoutdomainandparam );
if ( empty ( $urltograbwithoutdomainandparam ) && ! preg_match ( '/\/$/' , $urltograb ))
{
$urltograb .= '/' ;
}
2019-01-27 11:55:16 +01:00
$pageurl = dol_sanitizeFileName ( preg_replace ( '/[\/\.]/' , '-' , preg_replace ( '/\/+$/' , '' , $urltograbwithoutdomainandparam )));
2018-12-17 17:29:04 +01:00
2018-11-30 14:30:00 +01:00
$urltograbdirwithoutslash = dirname ( $urltograb . '.' );
$urltograbdirrootwithoutslash = getRootURLFromURL ( $urltograbdirwithoutslash );
// Exemple, now $urltograbdirwithoutslash is https://www.dolimed.com/screenshots
// and $urltograbdirrootwithoutslash is https://www.dolimed.com
}
2017-08-20 18:50:51 +02:00
2018-02-19 14:56:37 +01:00
// Check pageurl is not already used
2018-02-19 18:07:59 +01:00
if ( $pageurl )
2017-10-07 13:09:31 +02:00
{
2018-02-19 18:07:59 +01:00
$tmpwebsitepage = new WebsitePage ( $db );
$result = $tmpwebsitepage -> fetch ( 0 , $object -> id , $pageurl );
if ( $result > 0 )
{
setEventMessages ( $langs -> trans ( " AliasPageAlreadyExists " , $pageurl ), null , 'errors' );
$error ++ ;
$action = 'createcontainer' ;
}
2017-12-10 17:59:19 +01:00
}
2017-08-20 18:50:51 +02:00
2018-02-19 14:56:37 +01:00
if ( ! $error )
{
$tmp = getURLContent ( $urltograb );
if ( $tmp [ 'curl_error_no' ])
2017-10-07 13:09:31 +02:00
{
2018-02-19 14:56:37 +01:00
$error ++ ;
setEventMessages ( 'Error getting ' . $urltograb . ': ' . $tmp [ 'curl_error_msg' ], null , 'errors' );
$action = 'createcontainer' ;
2017-10-07 13:09:31 +02:00
}
2018-02-19 14:56:37 +01:00
elseif ( $tmp [ 'http_code' ] != '200' )
2017-10-07 13:09:31 +02:00
{
2018-02-19 14:56:37 +01:00
$error ++ ;
setEventMessages ( 'Error getting ' . $urltograb . ': ' . $tmp [ 'http_code' ], null , 'errors' );
$action = 'createcontainer' ;
2017-10-07 13:09:31 +02:00
}
2018-02-19 14:56:37 +01:00
else
2017-10-07 13:09:31 +02:00
{
2018-02-19 14:56:37 +01:00
// Remove comments
$tmp [ 'content' ] = removeHtmlComment ( $tmp [ 'content' ]);
2017-10-07 13:09:31 +02:00
2018-09-25 15:00:37 +02:00
preg_match ( '/<head>(.*)<\/head>/ims' , $tmp [ 'content' ], $reg );
2018-02-19 14:56:37 +01:00
$head = $reg [ 1 ];
$objectpage -> type_container = 'page' ;
$objectpage -> pageurl = $pageurl ;
if ( empty ( $objectpage -> pageurl ))
{
$tmpdomain = getDomainFromURL ( $urltograb );
$objectpage -> pageurl = $tmpdomain . '-home' ;
}
2017-10-07 13:09:31 +02:00
2018-02-28 14:36:22 +01:00
$objectpage -> aliasalt = '' ;
2018-02-28 19:20:02 +01:00
if ( preg_match ( '/^(\d+)\-/' , basename ( $urltograb ), $reg )) $objectpage -> aliasalt = $reg [ 1 ];
2018-02-28 14:36:22 +01:00
2018-02-19 14:56:37 +01:00
if ( preg_match ( '/<title>(.*)<\/title>/ims' , $head , $regtmp ))
2017-12-10 17:59:19 +01:00
{
2018-02-19 14:56:37 +01:00
$objectpage -> title = $regtmp [ 1 ];
2017-12-10 17:59:19 +01:00
}
2018-02-19 16:46:29 +01:00
if ( preg_match ( '/<meta name="title"[^"]+content="([^"]+)"/ims' , $head , $regtmp ))
{
if ( empty ( $objectpage -> title )) $objectpage -> title = $regtmp [ 1 ]; // If title not found into <title>, we get it from <meta title>
}
2018-02-19 14:56:37 +01:00
if ( preg_match ( '/<meta name="description"[^"]+content="([^"]+)"/ims' , $head , $regtmp ))
2017-12-10 17:59:19 +01:00
{
2018-02-19 14:56:37 +01:00
$objectpage -> description = $regtmp [ 1 ];
2017-12-10 17:59:19 +01:00
}
2018-02-19 14:56:37 +01:00
if ( preg_match ( '/<meta name="keywords"[^"]+content="([^"]+)"/ims' , $head , $regtmp ))
2017-10-07 13:09:31 +02:00
{
2018-02-19 14:56:37 +01:00
$objectpage -> keywords = $regtmp [ 1 ];
2017-10-07 13:09:31 +02:00
}
2018-02-19 14:56:37 +01:00
if ( preg_match ( '/<html\s+lang="([^"]+)"/ims' , $tmp [ 'content' ], $regtmp ))
2017-12-10 17:59:19 +01:00
{
2018-02-19 14:56:37 +01:00
$tmplang = explode ( '-' , $regtmp [ 1 ]);
$objectpage -> lang = $tmplang [ 0 ] . ( $tmplang [ 1 ] ? '_' . strtoupper ( $tmplang [ 1 ]) : '' );
2017-12-10 17:59:19 +01:00
}
2017-10-01 21:29:49 +02:00
2018-02-19 16:46:29 +01:00
$tmp [ 'content' ] = preg_replace ( '/\s*<meta name="generator"[^"]+content="([^"]+)"\s*\/?>/ims' , '' , $tmp [ 'content' ]);
2018-02-19 14:56:37 +01:00
$objectpage -> content = $tmp [ 'content' ];
$objectpage -> content = preg_replace ( '/^.*<body(\s[^>]*)*>/ims' , '' , $objectpage -> content );
$objectpage -> content = preg_replace ( '/<\/body(\s[^>]*)*>.*$/ims' , '' , $objectpage -> content );
$absoluteurlinaction = $urltograbdirwithoutslash ;
// TODO Replace 'action="$urltograbdirwithoutslash' into action="/"
// TODO Replace 'action="$urltograbdirwithoutslash..."' into action="..."
// TODO Replace 'a href="$urltograbdirwithoutslash' into a href="/"
// TODO Replace 'a href="$urltograbdirwithoutslash..."' into a href="..."
// Now loop to fetch all css files. Include them inline into header of page
$objectpage -> htmlheader = $tmp [ 'content' ];
$objectpage -> htmlheader = preg_replace ( '/^.*<head(\s[^>]*)*>/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<\/head(\s[^>]*)*>.*$/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<base(\s[^>]*)*>\n*/ims' , '' , $objectpage -> htmlheader );
2018-02-19 16:46:29 +01:00
$objectpage -> htmlheader = preg_replace ( '/<meta http-equiv="content-type"([^>]*)*>\n*/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<meta name="robots"([^>]*)*>\n*/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<meta name="title"([^>]*)*>\n*/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<meta name="description"([^>]*)*>\n*/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<meta name="keywords"([^>]*)*>\n*/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<meta name="generator"([^>]*)*>\n*/ims' , '' , $objectpage -> htmlheader );
2018-02-19 14:56:37 +01:00
//$objectpage->htmlheader = preg_replace('/<meta name="verify-v1[^>]*>\n*/ims', '', $objectpage->htmlheader);
//$objectpage->htmlheader = preg_replace('/<meta name="msvalidate.01[^>]*>\n*/ims', '', $objectpage->htmlheader);
$objectpage -> htmlheader = preg_replace ( '/<title>[^<]*<\/title>\n*/ims' , '' , $objectpage -> htmlheader );
$objectpage -> htmlheader = preg_replace ( '/<link[^>]*rel="shortcut[^>]*>\n/ims' , '' , $objectpage -> htmlheader );
2018-10-15 17:48:39 +02:00
$objectpage -> htmlheader = preg_replace ( '/<link[^>]*rel="canonical[^>]*>\n/ims' , '' , $objectpage -> htmlheader );
2018-02-19 14:56:37 +01:00
// Now loop to fetch JS
$tmp = $objectpage -> htmlheader ;
preg_match_all ( '/<script([^\.>]+)src=["\']([^"\'>]+)["\']([^>]*)><\/script>/i' , $objectpage -> htmlheader , $regs );
2018-11-30 14:30:00 +01:00
$errorforsubresource = 0 ;
2018-02-19 14:56:37 +01:00
foreach ( $regs [ 0 ] as $key => $val )
{
dol_syslog ( " We will grab the resource found into script tag " . $regs [ 2 ][ $key ]);
2017-10-01 21:29:49 +02:00
2018-02-19 14:56:37 +01:00
$linkwithoutdomain = $regs [ 2 ][ $key ];
if ( preg_match ( '/^\//' , $regs [ 2 ][ $key ]))
{
$urltograbbis = $urltograbdirrootwithoutslash . $regs [ 2 ][ $key ]; // We use dirroot
}
else
{
$urltograbbis = $urltograbdirwithoutslash . '/' . $regs [ 2 ][ $key ]; // We use dir of grabbed file
}
2017-10-06 22:49:08 +02:00
2018-02-19 14:56:37 +01:00
//$filetosave = $conf->medias->multidir_output[$conf->entity].'/css/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $regs[2][$key])?'':'/').$regs[2][$key];
if ( preg_match ( '/^http/' , $regs [ 2 ][ $key ]))
{
$urltograbbis = $regs [ 2 ][ $key ];
$linkwithoutdomain = preg_replace ( '/^https?:\/\/[^\/]+\//i' , '' , $regs [ 2 ][ $key ]);
//$filetosave = $conf->medias->multidir_output[$conf->entity].'/css/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
}
2017-10-13 15:23:24 +02:00
2018-02-19 14:56:37 +01:00
//print $domaintograb.' - '.$domaintograbbis.' - '.$urltograbdirwithoutslash.' - ';
//print $linkwithoutdomain.' - '.$urltograbbis."<br>\n";
// Test if this is an external URL of grabbed web site. If yes, we do not load resource
$domaintograb = getDomainFromURL ( $urltograbdirwithoutslash );
$domaintograbbis = getDomainFromURL ( $urltograbbis );
if ( $domaintograb != $domaintograbbis ) continue ;
/*
$tmpgeturl = getURLContent ( $urltograbbis );
if ( $tmpgeturl [ 'curl_error_no' ])
{
$error ++ ;
2018-11-30 14:30:00 +01:00
setEventMessages ( 'Error getting script url ' . $urltograbbis . ': ' . $tmpgeturl [ 'curl_error_msg' ], null , 'errors' );
$errorforsubresource ++ ;
2018-02-19 14:56:37 +01:00
$action = 'createcontainer' ;
}
elseif ( $tmpgeturl [ 'http_code' ] != '200' )
{
$error ++ ;
2018-11-30 14:30:00 +01:00
setEventMessages ( 'Error getting script url ' . $urltograbbis . ': ' . $tmpgeturl [ 'http_code' ], null , 'errors' );
$errorforsubresource ++ ;
2018-02-19 14:56:37 +01:00
$action = 'createcontainer' ;
}
else
{
dol_mkdir ( dirname ( $filetosave ));
$fp = fopen ( $filetosave , " w " );
fputs ( $fp , $tmpgeturl [ 'content' ]);
fclose ( $fp );
if ( ! empty ( $conf -> global -> MAIN_UMASK ))
@ chmod ( $file , octdec ( $conf -> global -> MAIN_UMASK ));
}
*/
//$filename = 'image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
2019-01-27 11:55:16 +01:00
$tmp = preg_replace ( '/' . preg_quote ( $regs [ 0 ][ $key ], '/' ) . '/i' , '' , $tmp );
2017-12-10 17:59:19 +01:00
}
2018-02-19 16:46:29 +01:00
$objectpage -> htmlheader = trim ( $tmp ) . " \n " ;
2018-02-19 14:56:37 +01:00
2017-10-13 15:23:24 +02:00
2018-02-19 14:56:37 +01:00
// Now loop to fetch CSS
$pagecsscontent = " \n " . '<style>' . " \n " ;
preg_match_all ( '/<link([^\.>]+)href=["\']([^"\'>]+\.css[^"\'>]*)["\']([^>]*)>/i' , $objectpage -> htmlheader , $regs );
2018-11-30 14:30:00 +01:00
$errorforsubresource = 0 ;
2018-02-19 14:56:37 +01:00
foreach ( $regs [ 0 ] as $key => $val )
2017-10-07 13:09:31 +02:00
{
2018-11-30 14:30:00 +01:00
dol_syslog ( " We will grab the resources found into link tag " . $regs [ 2 ][ $key ]);
2017-10-07 13:09:31 +02:00
2018-02-19 14:56:37 +01:00
$linkwithoutdomain = $regs [ 2 ][ $key ];
if ( preg_match ( '/^\//' , $regs [ 2 ][ $key ]))
{
$urltograbbis = $urltograbdirrootwithoutslash . $regs [ 2 ][ $key ]; // We use dirroot
}
else
{
$urltograbbis = $urltograbdirwithoutslash . '/' . $regs [ 2 ][ $key ]; // We use dir of grabbed file
}
2017-10-13 15:23:24 +02:00
2018-02-19 14:56:37 +01:00
//$filetosave = $conf->medias->multidir_output[$conf->entity].'/css/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $regs[2][$key])?'':'/').$regs[2][$key];
if ( preg_match ( '/^http/' , $regs [ 2 ][ $key ]))
{
$urltograbbis = $regs [ 2 ][ $key ];
$linkwithoutdomain = preg_replace ( '/^https?:\/\/[^\/]+\//i' , '' , $regs [ 2 ][ $key ]);
//$filetosave = $conf->medias->multidir_output[$conf->entity].'/css/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
}
2017-10-13 15:23:24 +02:00
2018-02-19 14:56:37 +01:00
//print $domaintograb.' - '.$domaintograbbis.' - '.$urltograbdirwithoutslash.' - ';
//print $linkwithoutdomain.' - '.$urltograbbis."<br>\n";
// Test if this is an external URL of grabbed web site. If yes, we do not load resource
$domaintograb = getDomainFromURL ( $urltograbdirwithoutslash );
$domaintograbbis = getDomainFromURL ( $urltograbbis );
if ( $domaintograb != $domaintograbbis ) continue ;
$tmpgeturl = getURLContent ( $urltograbbis );
if ( $tmpgeturl [ 'curl_error_no' ])
{
2018-11-30 14:30:00 +01:00
$errorforsubresource ++ ;
setEventMessages ( 'Error getting link tag url ' . $urltograbbis . ': ' . $tmpgeturl [ 'curl_error_msg' ], null , 'errors' );
dol_syslog ( 'Error getting ' . $urltograbbis . ': ' . $tmpgeturl [ 'curl_error_msg' ]);
2018-02-19 14:56:37 +01:00
$action = 'createcontainer' ;
}
elseif ( $tmpgeturl [ 'http_code' ] != '200' )
{
2018-11-30 14:30:00 +01:00
$errorforsubresource ++ ;
setEventMessages ( 'Error getting link tag url' . $urltograbbis . ': ' . $tmpgeturl [ 'http_code' ], null , 'errors' );
dol_syslog ( 'Error getting ' . $urltograbbis . ': ' . $tmpgeturl [ 'curl_error_msg' ]);
2018-02-19 14:56:37 +01:00
$action = 'createcontainer' ;
}
else
{
//dol_mkdir(dirname($filetosave));
2017-10-07 13:09:31 +02:00
2018-02-19 14:56:37 +01:00
//$fp = fopen($filetosave, "w");
//fputs($fp, $tmpgeturl['content']);
//fclose($fp);
//if (! empty($conf->global->MAIN_UMASK))
// @chmod($file, octdec($conf->global->MAIN_UMASK));
2017-10-07 13:09:31 +02:00
2018-02-19 14:56:37 +01:00
// $filename = 'image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
$pagecsscontent .= '/* Content of file ' . $urltograbbis . ' */' . " \n " ;
2017-10-07 13:09:31 +02:00
2018-02-19 14:56:37 +01:00
getAllImages ( $object , $objectpage , $urltograbbis , $tmpgeturl [ 'content' ], $action , 1 , $grabimages , $grabimagesinto );
2017-10-07 13:09:31 +02:00
2018-02-19 14:56:37 +01:00
$pagecsscontent .= $tmpgeturl [ 'content' ] . " \n " ;
2017-10-07 13:09:31 +02:00
2019-01-27 11:55:16 +01:00
$objectpage -> htmlheader = preg_replace ( '/' . preg_quote ( $regs [ 0 ][ $key ], '/' ) . '\n*/ims' , '' , $objectpage -> htmlheader );
2018-02-19 14:56:37 +01:00
}
2017-12-10 17:59:19 +01:00
}
2017-10-06 22:49:08 +02:00
2018-02-19 16:46:29 +01:00
$pagecsscontent .= '</style>' ;
2018-02-19 14:56:37 +01:00
//var_dump($pagecsscontent);
2017-10-06 22:49:08 +02:00
2018-02-19 14:56:37 +01:00
//print dol_escape_htmltag($tmp);exit;
2018-02-19 16:46:29 +01:00
$objectpage -> htmlheader .= trim ( $pagecsscontent ) . " \n " ;
2017-10-01 18:27:54 +02:00
2017-10-07 02:29:27 +02:00
2018-02-19 14:56:37 +01:00
// Now loop to fetch all images into page
$tmp = $objectpage -> content ;
2017-10-06 22:49:08 +02:00
2018-02-19 14:56:37 +01:00
getAllImages ( $object , $objectpage , $urltograb , $tmp , $action , 1 , $grabimages , $grabimagesinto );
2017-10-01 20:37:41 +02:00
2018-02-20 11:16:13 +01:00
// Normalize links href to Dolibarr internal naming
$tmp = preg_replace ( '/a href="\/([^\/"]+)\/([^\/"]+)"/' , 'a href="/\1-\2.php"' , $tmp );
$tmp = preg_replace ( '/a href="\/([^\/"]+)\/([^\/"]+)\/([^\/"]+)"/' , 'a href="/\1-\2-\3.php"' , $tmp );
$tmp = preg_replace ( '/a href="\/([^\/"]+)\/([^\/"]+)\/([^\/"]+)\/([^\/"]+)"/' , 'a href="/\1-\2-\3-\4.php"' , $tmp );
2018-02-19 14:56:37 +01:00
//print dol_escape_htmltag($tmp);exit;
$objectpage -> content = $tmp ;
2017-10-01 18:27:54 +02:00
2018-02-19 14:56:37 +01:00
$objectpage -> grabbed_from = $urltograb ;
}
2017-10-07 13:09:31 +02:00
}
}
else
{
2019-01-27 11:55:16 +01:00
$objectpage -> title = GETPOST ( 'WEBSITE_TITLE' , 'alpha' );
$objectpage -> type_container = GETPOST ( 'WEBSITE_TYPE_CONTAINER' , 'alpha' );
$objectpage -> pageurl = GETPOST ( 'WEBSITE_PAGENAME' , 'alpha' );
$objectpage -> aliasalt = GETPOST ( 'WEBSITE_ALIASALT' , 'alpha' );
$objectpage -> description = GETPOST ( 'WEBSITE_DESCRIPTION' , 'alpha' );
$objectpage -> image = GETPOST ( 'WEBSITE_IMAGE' , 'alpha' );
$objectpage -> keywords = GETPOST ( 'WEBSITE_KEYWORDS' , 'alpha' );
$objectpage -> lang = GETPOST ( 'WEBSITE_LANG' , 'aZ09' );
$objectpage -> htmlheader = GETPOST ( 'htmlheader' , 'none' );
2017-12-12 01:40:34 +01:00
2017-12-19 12:54:10 +01:00
$substitutionarray = array ();
$substitutionarray [ '__WEBSITE_CREATE_BY__' ] = $user -> getFullName ( $langs );
2018-01-07 22:04:31 +01:00
2019-01-27 11:55:16 +01:00
$sample = GETPOST ( 'sample' , 'alpha' );
2018-02-20 18:10:11 +01:00
if ( empty ( $sample )) $sample = 'empty' ;
2018-12-17 19:37:17 +01:00
$pathtosample = DOL_DOCUMENT_ROOT . '/website/samples/page-sample-' . $sample . '.html' ;
2018-02-20 18:10:11 +01:00
2018-01-07 22:04:31 +01:00
// Init content with content into pagetemplate.html, blogposttempltate.html, ...
2018-02-20 18:10:11 +01:00
$objectpage -> content = make_substitutions ( @ file_get_contents ( $pathtosample ), $substitutionarray );
2017-10-07 13:09:31 +02:00
}
if ( ! $error )
{
if ( empty ( $objectpage -> pageurl ))
{
2018-02-19 16:46:29 +01:00
$langs -> load ( " errors " );
2017-10-07 13:09:31 +02:00
setEventMessages ( $langs -> trans ( " ErrorFieldRequired " , $langs -> transnoentitiesnoconv ( " WEBSITE_PAGENAME " )), null , 'errors' );
$error ++ ;
2017-12-12 01:40:34 +01:00
$action = 'createcontainer' ;
2017-10-07 13:09:31 +02:00
}
2019-01-27 10:49:34 +01:00
elseif ( ! preg_match ( '/^[a-z0-9\-\_]+$/i' , $objectpage -> pageurl ))
2017-10-07 13:09:31 +02:00
{
2018-02-19 16:46:29 +01:00
$langs -> load ( " errors " );
2017-10-07 13:09:31 +02:00
setEventMessages ( $langs -> transnoentities ( " ErrorFieldCanNotContainSpecialCharacters " , $langs -> transnoentities ( 'WEBSITE_PAGENAME' )), null , 'errors' );
$error ++ ;
2017-12-12 01:40:34 +01:00
$action = 'createcontainer' ;
2017-10-07 13:09:31 +02:00
}
if ( empty ( $objectpage -> title ))
{
2018-02-19 16:46:29 +01:00
$langs -> load ( " errors " );
2017-10-07 13:09:31 +02:00
setEventMessages ( $langs -> trans ( " ErrorFieldRequired " , $langs -> transnoentitiesnoconv ( " WEBSITE_TITLE " )), null , 'errors' );
$error ++ ;
2017-12-12 01:40:34 +01:00
$action = 'createcontainer' ;
2017-10-07 13:09:31 +02:00
}
}
if ( ! $error )
{
$res = $objectpage -> create ( $user );
if ( $res <= 0 )
{
$error ++ ;
setEventMessages ( $objectpage -> error , $objectpage -> errors , 'errors' );
2017-12-12 01:40:34 +01:00
$action = 'createcontainer' ;
2017-10-07 13:09:31 +02:00
}
}
if ( ! $error )
{
if ( ! empty ( $objectpage -> content ))
{
2017-10-01 20:37:41 +02:00
$filealias = $pathofwebsite . '/' . $objectpage -> pageurl . '.php' ;
$filetpl = $pathofwebsite . '/page' . $objectpage -> id . '.tpl.php' ;
2017-10-07 13:09:31 +02:00
// Save page alias
$result = dolSavePageAlias ( $filealias , $object , $objectpage );
2019-08-14 16:28:41 +02:00
if ( ! $result )
{
setEventMessages ( 'Failed to write file ' . $filealias , null , 'errors' );
}
2017-10-07 13:09:31 +02:00
// Save page of content
$result = dolSavePageContent ( $filetpl , $object , $objectpage );
if ( $result )
{
setEventMessages ( $langs -> trans ( " Saved " ), null , 'mesgs' );
}
else
{
setEventMessages ( 'Failed to write file ' . $filetpl , null , 'errors' );
2018-11-30 14:30:00 +01:00
$action = 'createcontainer' ;
2017-10-07 13:09:31 +02:00
}
}
}
2016-04-23 21:34:10 +02:00
if ( ! $error )
{
$db -> commit ();
2017-10-07 13:09:31 +02:00
setEventMessages ( $langs -> trans ( " PageAdded " , $objectpage -> pageurl ), null , 'mesgs' );
$action = '' ;
2016-04-23 21:34:10 +02:00
}
else
{
$db -> rollback ();
}
2017-07-02 23:38:19 +02:00
if ( ! $error )
{
2017-10-01 21:29:49 +02:00
$pageid = $objectpage -> id ;
2017-10-01 20:37:41 +02:00
2017-10-01 21:29:49 +02:00
// To generate the CSS, robot and htmlheader file.
2017-10-01 20:37:41 +02:00
2017-10-13 15:23:24 +02:00
// Check symlink to medias and restore it if ko
$pathtomedias = DOL_DATA_ROOT . '/medias' ;
$pathtomediasinwebsite = $pathofwebsite . '/medias' ;
if ( ! is_link ( dol_osencode ( $pathtomediasinwebsite )))
{
dol_syslog ( " Create symlink for " . $pathtomedias . " into name " . $pathtomediasinwebsite );
dol_mkdir ( dirname ( $pathtomediasinwebsite )); // To be sure dir for website exists
$result = symlink ( $pathtomedias , $pathtomediasinwebsite );
}
2017-10-01 20:37:41 +02:00
if ( ! dol_is_file ( $filehtmlheader ))
{
2017-12-19 12:54:10 +01:00
$htmlheadercontent = " <html> \n " ;
2018-01-02 17:27:05 +01:00
$htmlheadercontent .= $htmlheadercontentdefault ;
2017-12-19 12:54:10 +01:00
$htmlheadercontent .= " </html> " ;
2017-10-01 20:37:41 +02:00
$result = dolSaveHtmlHeader ( $filehtmlheader , $htmlheadercontent );
}
if ( ! dol_is_file ( $filecss ))
{
2017-12-19 12:54:10 +01:00
$csscontent = " /* CSS content (all pages) */ \n body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; } \n .bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;} " ;
2017-10-01 20:37:41 +02:00
$result = dolSaveCssFile ( $filecss , $csscontent );
}
2017-10-07 03:08:01 +02:00
if ( ! dol_is_file ( $filejs ))
{
$jscontent = " /* JS content (all pages) */ \n " ;
$result = dolSaveJsFile ( $filejs , $jscontent );
}
2017-10-01 20:37:41 +02:00
if ( ! dol_is_file ( $filerobot ))
{
$robotcontent = " # Robot file. Generated with Dolibarr \n User-agent: * \n Allow: /public/ \n Disallow: /administrator/ " ;
$result = dolSaveRobotFile ( $filerobot , $robotcontent );
}
if ( ! dol_is_file ( $filehtaccess ))
{
$htaccesscontent = " # Order allow,deny \n # Deny from all " ;
$result = dolSaveHtaccessFile ( $filehtaccess , $htaccesscontent );
}
2019-08-12 17:34:18 +02:00
if ( ! dol_is_file ( $filemanifestjson ))
{
$manifestjsoncontent = " " ;
$result = dolSaveManifestJson ( $filemanifestjson , $manifestjsoncontent );
}
2019-08-15 00:55:47 +02:00
if ( ! dol_is_file ( $filereadme ))
{
$readmecontent = " Website generated by Dolibarr ERP CRM " ;
$result = dolSaveReadme ( $filereadme , $readmecontent );
}
2019-08-12 17:34:18 +02:00
2017-10-01 20:37:41 +02:00
$action = 'preview' ;
2017-07-02 23:38:19 +02:00
}
2016-04-23 21:34:10 +02:00
}
2018-09-08 12:04:40 +02:00
// Delete site
2019-06-02 17:27:00 +02:00
if ( $action == 'confirm_deletesite' && $confirm == 'yes' )
2018-09-08 12:04:40 +02:00
{
$error = 0 ;
$db -> begin ();
2019-06-02 17:27:00 +02:00
$res = $object -> fetch ( GETPOST ( 'id' , 'int' ));
2018-09-08 12:04:40 +02:00
$website = $object ;
if ( $res > 0 )
{
$res = $object -> delete ( $user );
if ( $res <= 0 )
{
$error ++ ;
setEventMessages ( $object -> error , $object -> errors , 'errors' );
}
}
2019-06-02 17:27:00 +02:00
if ( ! $error )
{
if ( GETPOST ( 'delete_also_js' , 'alpha' ) == 'on' )
{
$pathofwebsitejs = DOL_DATA_ROOT . '/medias/js/' . $object -> ref ;
dol_delete_dir_recursive ( $pathofwebsitejs );
}
if ( GETPOST ( 'delete_also_medias' , 'alpha' ) == 'on' )
{
$pathofwebsitemedias = DOL_DATA_ROOT . '/medias/image/' . $object -> ref ;
dol_delete_dir_recursive ( $pathofwebsitemedias );
}
}
2018-09-08 12:04:40 +02:00
if ( ! $error )
{
$db -> commit ();
2019-06-02 17:27:00 +02:00
setEventMessages ( $langs -> trans ( " SiteDeleted " , $object -> ref ), null , 'mesgs' );
2018-09-08 12:04:40 +02:00
2019-06-02 17:27:00 +02:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?id=' . $object -> id );
2018-09-08 12:04:40 +02:00
exit ;
}
else
{
$db -> rollback ();
dol_print_error ( $db );
}
}
2017-10-07 02:29:27 +02:00
// Delete page
2016-05-01 17:01:38 +02:00
if ( $action == 'delete' )
{
2018-02-15 00:01:25 +01:00
$error = 0 ;
2017-10-07 13:09:31 +02:00
$db -> begin ();
2016-05-01 17:01:38 +02:00
2018-07-22 17:18:35 +02:00
$res = $object -> fetch ( 0 , $websitekey );
$website = $object ;
2016-05-01 17:01:38 +02:00
2017-10-07 13:09:31 +02:00
$res = $objectpage -> fetch ( $pageid , $object -> fk_website );
2016-05-01 17:01:38 +02:00
2017-10-07 13:09:31 +02:00
if ( $res > 0 )
{
$res = $objectpage -> delete ( $user );
2018-02-15 00:01:25 +01:00
if ( $res <= 0 )
2017-10-07 13:09:31 +02:00
{
$error ++ ;
setEventMessages ( $objectpage -> error , $objectpage -> errors , 'errors' );
}
2018-02-15 00:01:25 +01:00
}
2016-05-01 17:01:38 +02:00
2018-02-15 00:01:25 +01:00
if ( ! $error )
{
$db -> commit ();
2018-07-22 17:18:35 +02:00
setEventMessages ( $langs -> trans ( " PageDeleted " , $objectpage -> pageurl , $websitekey ), null , 'mesgs' );
2017-07-02 23:38:19 +02:00
2018-07-22 17:18:35 +02:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . $websitekey );
2018-02-15 00:01:25 +01:00
exit ;
2017-10-07 13:09:31 +02:00
}
else
{
2018-02-15 00:01:25 +01:00
$db -> rollback ();
2017-10-07 13:09:31 +02:00
dol_print_error ( $db );
}
2016-05-01 17:01:38 +02:00
}
2016-05-01 16:34:50 +02:00
// Update css
if ( $action == 'updatecss' )
2016-04-23 21:34:10 +02:00
{
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'refreshsite' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' )) // If we tried to reload another site/page, we stay on editcss mode.
2017-07-19 16:38:00 +02:00
{
$action = 'editcss' ;
}
else
{
2018-07-22 17:18:35 +02:00
$res = $object -> fetch ( 0 , $websitekey );
$website = $object ;
2017-07-19 16:38:00 +02:00
2019-01-23 14:57:43 +01:00
if ( GETPOSTISSET ( 'virtualhost' ))
{
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'virtualhost' , 'alpha' ) && ! preg_match ( '/^http/' , GETPOST ( 'virtualhost' , 'alpha' )))
2019-01-23 14:57:43 +01:00
{
$error ++ ;
2019-01-23 15:06:28 +01:00
setEventMessages ( $langs -> trans ( 'ErrorURLMustStartWithHttp' , $langs -> transnoentitiesnoconv ( " VirtualHost " )), null , 'errors' );
2019-01-23 14:57:43 +01:00
$action = 'editcss' ;
}
if ( ! $error )
{
2019-01-27 11:55:16 +01:00
$object -> virtualhost = GETPOST ( 'virtualhost' , 'alpha' );
2019-01-23 14:57:43 +01:00
$result = $object -> update ( $user );
if ( $result < 0 )
{
$error ++ ;
setEventMessages ( $object -> error , $object -> errors , 'errors' );
$action = 'editcss' ;
}
}
}
2018-11-30 14:46:44 +01:00
2019-01-23 14:57:43 +01:00
if ( ! $error )
{
// Save master.inc.php file
$filemaster = $pathofwebsite . '/master.inc.php' ;
2018-12-17 17:29:04 +01:00
2019-01-23 14:57:43 +01:00
dol_syslog ( " Save master file " . $filemaster );
2018-11-30 14:46:44 +01:00
2019-01-23 14:57:43 +01:00
dol_mkdir ( $pathofwebsite );
2018-11-30 14:46:44 +01:00
2019-01-23 14:57:43 +01:00
// Now generate the master.inc.php page
$result = dolSaveMasterFile ( $filemaster );
2019-08-14 16:28:41 +02:00
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filemaster , null , 'errors' );
}
2018-12-17 17:29:04 +01:00
2017-07-21 20:16:53 +02:00
2019-01-23 14:57:43 +01:00
// Html header file
$htmlheadercontent = '' ;
2017-07-21 20:16:53 +02:00
2019-01-23 14:57:43 +01:00
/* We disable php code since htmlheader is never executed as an include but only read by fgets_content .
$htmlheadercontent .= " <?php // BEGIN PHP \n " ;
2019-03-06 14:33:05 +01:00
$htmlheadercontent .= '$websitekey=basename(__DIR__);' . " \n " ;
2019-08-12 17:34:18 +02:00
$htmlheadercontent .= " if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Load env if not already loaded " . " \n " ;
2019-01-23 14:57:43 +01:00
$htmlheadercontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php'; \n " ;
$htmlheadercontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php'; \n " ;
$htmlheadercontent .= " ob_start(); \n " ;
// $htmlheadercontent.= "header('Content-type: text/html');\n"; // Not required. htmlheader.html is never call as a standalone page
$htmlheadercontent .= " // END PHP ?> \n " ; */
2017-07-19 16:38:00 +02:00
2019-01-27 11:55:16 +01:00
$htmlheadercontent .= preg_replace ( array ( '/<html>\n*/ims' , '/<\/html>\n*/ims' ), array ( '' , '' ), GETPOST ( 'WEBSITE_HTML_HEADER' , 'none' ));
2017-07-21 20:16:53 +02:00
2019-01-23 14:57:43 +01:00
/* $htmlheadercontent .= " \n " . '<?php // BEGIN PHP' . " \n " ;
$htmlheadercontent .= '$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp);' . " \n " ;
$htmlheadercontent .= " // END PHP ?> " . " \n " ; */
2017-08-21 04:17:28 +02:00
2019-01-23 14:57:43 +01:00
$htmlheadercontent = trim ( $htmlheadercontent ) . " \n " ;
2017-07-19 16:38:00 +02:00
2019-08-14 16:28:41 +02:00
$result = dolSaveHtmlHeader ( $filehtmlheader , $htmlheadercontent );
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filehtmlheader , null , 'errors' );
}
2017-07-19 16:38:00 +02:00
2017-07-21 20:16:53 +02:00
2019-01-23 14:57:43 +01:00
// Css file
$csscontent = '' ;
2017-07-21 20:16:53 +02:00
2019-01-23 14:57:43 +01:00
$csscontent .= " <?php // BEGIN PHP \n " ;
2019-03-06 14:33:05 +01:00
$csscontent .= '$websitekey=basename(__DIR__);' . " \n " ;
2019-08-12 17:34:18 +02:00
$csscontent .= " if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once __DIR__.'/master.inc.php'; } // Load env if not already loaded " . " \n " ; // For the css, we need to set path of master using the dirname of css file.
2019-01-23 14:57:43 +01:00
$csscontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php'; \n " ;
$csscontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php'; \n " ;
$csscontent .= " ob_start(); \n " ;
2019-08-14 02:46:09 +02:00
$csscontent .= " if (! headers_sent()) { /* because file is included inline when in edit mode and we don't want warning */ \n " ;
2019-01-23 14:57:43 +01:00
$csscontent .= " header('Cache-Control: max-age=3600, public, must-revalidate'); \n " ;
$csscontent .= " header('Content-type: text/css'); \n " ;
2019-08-14 02:46:09 +02:00
$csscontent .= " } \n " ;
2019-01-23 14:57:43 +01:00
$csscontent .= " // END PHP ?> \n " ;
2017-07-19 16:38:00 +02:00
2019-08-14 16:28:41 +02:00
$csscontent .= trim ( GETPOST ( 'WEBSITE_CSS_INLINE' , 'none' )) . " \n " ;
2017-07-21 20:16:53 +02:00
2019-08-14 16:28:41 +02:00
$csscontent .= '<?php // BEGIN PHP' . " \n " ;
2019-08-13 06:37:06 +02:00
$csscontent .= '$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "css");' . " \n " ;
2019-01-23 14:57:43 +01:00
$csscontent .= " // END PHP ?> " . " \n " ;
2017-07-19 16:38:00 +02:00
2019-01-23 14:57:43 +01:00
dol_syslog ( " Save css content into " . $filecss );
2017-07-19 16:38:00 +02:00
2019-08-14 16:28:41 +02:00
$result = dolSaveCssFile ( $filecss , $csscontent );
2019-01-23 14:57:43 +01:00
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filecss , null , 'errors' );
}
2017-07-19 16:38:00 +02:00
2017-10-07 03:08:01 +02:00
2019-01-23 14:57:43 +01:00
// Js file
$jscontent = '' ;
2017-10-07 03:08:01 +02:00
2019-01-23 14:57:43 +01:00
$jscontent .= " <?php // BEGIN PHP \n " ;
2019-03-06 14:33:05 +01:00
$jscontent .= '$websitekey=basename(__DIR__);' . " \n " ;
2019-08-12 17:34:18 +02:00
$jscontent .= " if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once __DIR__.'/master.inc.php'; } // Load env if not already loaded " . " \n " ; // For the css, we need to set path of master using the dirname of css file.
2019-01-23 14:57:43 +01:00
$jscontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php'; \n " ;
$jscontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php'; \n " ;
$jscontent .= " ob_start(); \n " ;
$jscontent .= " header('Cache-Control: max-age=3600, public, must-revalidate'); \n " ;
$jscontent .= " header('Content-type: application/javascript'); \n " ;
$jscontent .= " // END PHP ?> \n " ;
2017-10-07 03:08:01 +02:00
2019-08-14 16:28:41 +02:00
$jscontent .= trim ( GETPOST ( 'WEBSITE_JS_INLINE' , 'none' )) . " \n " ;
2017-10-07 03:08:01 +02:00
2019-08-14 16:28:41 +02:00
$jscontent .= '<?php // BEGIN PHP' . " \n " ;
2019-08-13 06:37:06 +02:00
$jscontent .= '$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "js");' . " \n " ;
2019-01-23 14:57:43 +01:00
$jscontent .= " // END PHP ?> " . " \n " ;
2017-10-07 03:08:01 +02:00
2019-08-14 16:28:41 +02:00
$result = dolSaveJsFile ( $filejs , $jscontent );
2019-01-23 14:57:43 +01:00
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filejs , null , 'errors' );
}
2017-10-07 03:08:01 +02:00
2017-07-23 17:44:26 +02:00
2019-01-23 14:57:43 +01:00
// Robot file
$robotcontent = '' ;
2017-07-23 17:44:26 +02:00
2019-01-23 14:57:43 +01:00
/* $robotcontent .= " <?php // BEGIN PHP \n " ;
2019-03-06 14:33:05 +01:00
$robotcontent .= '$websitekey=basename(__DIR__);' . " \n " ;
2019-08-12 17:34:18 +02:00
$robotcontent .= " if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Load env if not already loaded " . " \n " ;
2019-01-23 14:57:43 +01:00
$robotcontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php'; \n " ;
$robotcontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php'; \n " ;
$robotcontent .= " ob_start(); \n " ;
$robotcontent .= " header('Cache-Control: max-age=3600, public, must-revalidate'); \n " ;
$robotcontent .= " header('Content-type: text/css'); \n " ;
$robotcontent .= " // END PHP ?> \n " ; */
2017-07-23 17:44:26 +02:00
2019-08-14 16:28:41 +02:00
$robotcontent .= trim ( GETPOST ( 'WEBSITE_ROBOT' , 'none' )) . " \n " ;
2017-07-23 17:44:26 +02:00
2019-01-23 14:57:43 +01:00
/* $robotcontent .= " \n " . '<?php // BEGIN PHP' . " \n " ;
2019-08-13 06:37:06 +02:00
$robotcontent .= '$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "robot");' . " \n " ;
2019-01-23 14:57:43 +01:00
$robotcontent .= " // END PHP ?> " . " \n " ; */
2017-07-23 17:44:26 +02:00
2019-08-14 16:28:41 +02:00
$result = dolSaveRobotFile ( $filerobot , $robotcontent );
2019-01-23 14:57:43 +01:00
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filerobot , null , 'errors' );
}
2017-07-23 17:44:26 +02:00
2019-08-12 17:34:18 +02:00
// Htaccess file
2019-01-23 14:57:43 +01:00
$htaccesscontent = '' ;
2019-08-14 16:28:41 +02:00
$htaccesscontent .= trim ( GETPOST ( 'WEBSITE_HTACCESS' , 'none' )) . " \n " ;
2019-01-23 14:57:43 +01:00
2019-08-14 16:28:41 +02:00
$result = dolSaveHtaccessFile ( $filehtaccess , $htaccesscontent );
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filehtaccess , null , 'errors' );
}
2017-07-23 17:44:26 +02:00
2019-08-12 17:34:18 +02:00
// manifest.json file
$manifestjsoncontent = '' ;
$manifestjsoncontent .= " <?php // BEGIN PHP \n " ;
$manifestjsoncontent .= '$websitekey=basename(__DIR__);' . " \n " ;
$manifestjsoncontent .= " if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once __DIR__.'/master.inc.php'; } // Load env if not already loaded " . " \n " ; // For the css, we need to set path of master using the dirname of css file.
$manifestjsoncontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php'; \n " ;
$manifestjsoncontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php'; \n " ;
$manifestjsoncontent .= " ob_start(); \n " ;
$manifestjsoncontent .= " header('Cache-Control: max-age=3600, public, must-revalidate'); \n " ;
$manifestjsoncontent .= " header('Content-type: application/manifest+json'); \n " ;
$manifestjsoncontent .= " // END PHP ?> \n " ;
2019-08-14 16:28:41 +02:00
$manifestjsoncontent .= trim ( GETPOST ( 'WEBSITE_MANIFEST_JSON' , 'none' )) . " \n " ;
2019-08-12 17:34:18 +02:00
2019-08-14 16:28:41 +02:00
$manifestjsoncontent .= '<?php // BEGIN PHP' . " \n " ;
2019-08-13 06:37:06 +02:00
$manifestjsoncontent .= '$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "manifest");' . " \n " ;
2019-08-12 17:34:18 +02:00
$manifestjsoncontent .= " // END PHP ?> " . " \n " ;
2019-08-14 16:28:41 +02:00
$result = dolSaveManifestJson ( $filemanifestjson , $manifestjsoncontent );
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filemanifestjson , null , 'errors' );
}
2019-08-12 17:34:18 +02:00
2019-08-15 00:55:47 +02:00
// README.md file
$readmecontent = '' ;
/* $readmecontent .= " <?php // BEGIN PHP \n " ;
$readmecontent .= '$websitekey=basename(__DIR__);' . " \n " ;
$readmecontent .= " if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once __DIR__.'/master.inc.php'; } // Load env if not already loaded " . " \n " ; // For the css, we need to set path of master using the dirname of css file.
$readmecontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php'; \n " ;
$readmecontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php'; \n " ;
$readmecontent .= " ob_start(); \n " ;
$readmecontent .= " header('Cache-Control: max-age=3600, public, must-revalidate'); \n " ;
$readmecontent .= " header('Content-type: application/manifest+json'); \n " ;
$readmecontent .= " // END PHP ?> \n " ; */
$readmecontent .= trim ( GETPOST ( 'WEBSITE_README' , 'none' )) . " \n " ;
/* $readmecontent .= '<?php // BEGIN PHP' . " \n " ;
$readmecontent .= '$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "manifest");' . " \n " ;
$readmecontent .= " // END PHP ?> " . " \n " ; */
$result = dolSaveReadme ( $filereadme , $readmecontent );
if ( ! $result )
{
$error ++ ;
setEventMessages ( 'Failed to write file ' . $filereadme , null , 'errors' );
}
2019-01-23 14:57:43 +01:00
// Message if no error
if ( ! $error )
{
setEventMessages ( $langs -> trans ( " Saved " ), null , 'mesgs' );
}
$action = 'preview' ;
2017-10-07 13:09:31 +02:00
}
2017-07-19 16:38:00 +02:00
}
2016-05-01 16:34:50 +02:00
}
2016-05-02 15:51:18 +02:00
// Update page
if ( $action == 'setashome' )
{
2017-10-07 13:09:31 +02:00
$db -> begin ();
2018-07-22 17:18:35 +02:00
$object -> fetch ( 0 , $websitekey );
$website = $object ;
2017-10-07 13:09:31 +02:00
$object -> fk_default_home = $pageid ;
$res = $object -> update ( $user );
if ( ! $res > 0 )
{
$error ++ ;
setEventMessages ( $object -> error , $object -> errors , 'errors' );
}
if ( ! $error )
{
$db -> commit ();
// Generate the index.php page to be the home page
//-------------------------------------------------
2018-09-09 14:05:23 +02:00
$result = dolSaveIndexPage ( $pathofwebsite , $fileindex , $filetpl , $filewrapper );
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
if ( $result ) setEventMessages ( $langs -> trans ( " Saved " ), null , 'mesgs' );
else setEventMessages ( 'Failed to write file ' . $fileindex , null , 'errors' );
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
$action = 'preview' ;
}
else
{
$db -> rollback ();
}
2016-05-02 15:51:18 +02:00
}
2016-09-15 19:27:04 +02:00
// Update page (meta)
2016-05-01 16:34:50 +02:00
if ( $action == 'updatemeta' )
{
2017-10-07 13:09:31 +02:00
$db -> begin ();
2018-02-19 16:46:29 +01:00
2018-08-20 19:10:33 +02:00
$result = $object -> fetch ( 0 , $websitekey );
2018-07-22 17:18:35 +02:00
$website = $object ;
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
$objectpage -> fk_website = $object -> id ;
2016-05-01 16:34:50 +02:00
2017-07-21 02:30:02 +02:00
// Check parameters
2019-02-09 12:00:49 +01:00
if ( ! preg_match ( '/^[a-z0-9\-\_]+$/i' , GETPOST ( 'WEBSITE_PAGENAME' , 'alpha' )))
2017-10-07 13:09:31 +02:00
{
$error ++ ;
2018-02-19 16:46:29 +01:00
$langs -> load ( " errors " );
2017-10-07 13:09:31 +02:00
setEventMessages ( $langs -> transnoentities ( " ErrorFieldCanNotContainSpecialCharacters " , $langs -> transnoentities ( 'WEBSITE_PAGENAME' )), null , 'errors' );
$action = 'editmeta' ;
}
2016-04-27 09:41:42 +02:00
2018-08-20 19:10:33 +02:00
$res = $objectpage -> fetch ( $pageid , $object -> id );
2017-10-07 13:09:31 +02:00
if ( $res <= 0 )
{
$error ++ ;
2018-02-19 16:46:29 +01:00
setEventMessages ( 'Page not found ' . $objectpage -> error , $objectpage -> errors , 'errors' );
2017-10-07 13:09:31 +02:00
}
2016-08-08 18:25:37 +02:00
2018-08-20 19:10:33 +02:00
// Check alias not exists
if ( ! $error && GETPOST ( 'WEBSITE_PAGENAME' , 'alpha' ))
{
$websitepagetemp = new WebsitePage ( $db );
$result = $websitepagetemp -> fetch ( - 1 * $objectpage -> id , $object -> id , GETPOST ( 'WEBSITE_PAGENAME' , 'alpha' ));
if ( $result < 0 )
{
$error ++ ;
$langs -> load ( " errors " );
setEventMessages ( $websitepagetemp -> error , $websitepagetemp -> errors , 'errors' );
$action = 'editmeta' ;
}
if ( $result > 0 )
{
$error ++ ;
$langs -> load ( " errors " );
setEventMessages ( $langs -> trans ( " ErrorAPageWithThisNameOrAliasAlreadyExists " , $websitepagetemp -> pageurl ), null , 'errors' );
$action = 'editmeta' ;
}
}
if ( ! $error && GETPOST ( 'WEBSITE_ALIASALT' , 'alpha' ))
{
$arrayofaliastotest = explode ( ',' , GETPOST ( 'WEBSITE_ALIASALT' , 'alpha' ));
$websitepagetemp = new WebsitePage ( $db );
foreach ( $arrayofaliastotest as $aliastotest )
{
$result = $websitepagetemp -> fetch ( - 1 * $objectpage -> id , $object -> id , $aliastotest );
if ( $result < 0 )
{
$error ++ ;
$langs -> load ( " errors " );
setEventMessages ( $websitepagetemp -> error , $websitepagetemp -> errors , 'errors' );
$action = 'editmeta' ;
break ;
}
if ( $result > 0 )
{
$error ++ ;
$langs -> load ( " errors " );
setEventMessages ( $langs -> trans ( " ErrorAPageWithThisNameOrAliasAlreadyExists " , $websitepagetemp -> pageurl ), null , 'errors' );
$action = 'editmeta' ;
break ;
}
}
}
2017-10-07 13:09:31 +02:00
if ( ! $error )
{
$objectpage -> old_object = clone $objectpage ;
2016-09-16 01:23:54 +02:00
2018-05-15 11:36:39 +02:00
$objectpage -> title = GETPOST ( 'WEBSITE_TITLE' , 'alpha' );
2017-12-02 13:24:21 +01:00
$objectpage -> type_container = GETPOST ( 'WEBSITE_TYPE_CONTAINER' , 'alpha' );
2017-10-07 13:09:31 +02:00
$objectpage -> pageurl = GETPOST ( 'WEBSITE_PAGENAME' , 'alpha' );
2018-02-28 14:36:22 +01:00
$objectpage -> aliasalt = GETPOST ( 'WEBSITE_ALIASALT' , 'alpha' );
2017-10-07 13:09:31 +02:00
$objectpage -> description = GETPOST ( 'WEBSITE_DESCRIPTION' , 'alpha' );
2018-11-20 18:29:29 +01:00
$objectpage -> image = GETPOST ( 'WEBSITE_IMAGE' , 'alpha' );
2017-10-07 13:09:31 +02:00
$objectpage -> keywords = GETPOST ( 'WEBSITE_KEYWORDS' , 'alpha' );
$objectpage -> lang = GETPOST ( 'WEBSITE_LANG' , 'aZ09' );
2018-02-19 16:46:29 +01:00
$objectpage -> htmlheader = trim ( GETPOST ( 'htmlheader' , 'none' ));
2019-01-27 11:55:16 +01:00
$newdatecreation = dol_mktime ( GETPOST ( 'datecreationhour' , 'int' ), GETPOST ( 'datecreationmin' , 'int' ), GETPOST ( 'datecreationsec' , 'int' ), GETPOST ( 'datecreationmonth' , 'int' ), GETPOST ( 'datecreationday' , 'int' ), GETPOST ( 'datecreationyear' , 'int' ));
2019-01-15 10:53:28 +01:00
if ( $newdatecreation ) $objectpage -> date_creation = $newdatecreation ;
2016-09-16 01:00:24 +02:00
2017-10-07 13:09:31 +02:00
$res = $objectpage -> update ( $user );
2018-08-20 19:10:33 +02:00
if ( ! ( $res > 0 ))
2017-10-07 13:09:31 +02:00
{
2018-08-20 19:10:33 +02:00
$langs -> load ( " errors " );
if ( $db -> lasterrno == 'DB_ERROR_RECORD_ALREADY_EXISTS' )
{
$error ++ ;
$langs -> load ( " errors " );
setEventMessages ( $langs -> trans ( " ErrorAPageWithThisNameOrAliasAlreadyExists " ), null , 'errors' );
$action = 'editmeta' ;
}
else
{
$error ++ ;
$langs -> load ( " errors " );
setEventMessages ( $objectpage -> error , $objectpage -> errors , 'errors' );
$action = 'editmeta' ;
}
2017-10-07 13:09:31 +02:00
}
2018-02-19 16:46:29 +01:00
}
2017-07-02 23:38:19 +02:00
2018-02-19 16:46:29 +01:00
if ( ! $error )
{
$db -> commit ();
}
else
{
$db -> rollback ();
}
2017-10-07 13:09:31 +02:00
2018-02-19 16:46:29 +01:00
if ( ! $error )
{
$filemaster = $pathofwebsite . '/master.inc.php' ;
$fileoldalias = $pathofwebsite . '/' . $objectpage -> old_object -> pageurl . '.php' ;
$filealias = $pathofwebsite . '/' . $objectpage -> pageurl . '.php' ;
2017-07-02 23:38:19 +02:00
2018-02-19 16:46:29 +01:00
dol_mkdir ( $pathofwebsite );
2017-07-02 23:38:19 +02:00
2018-02-19 16:46:29 +01:00
// Now generate the master.inc.php page
2018-09-10 23:20:31 +02:00
$result = dolSaveMasterFile ( $filemaster );
if ( ! $result ) setEventMessages ( 'Failed to write file ' . $filemaster , null , 'errors' );
2017-10-07 13:09:31 +02:00
2018-06-14 16:33:11 +02:00
// Now delete the alias.php page
2018-02-19 16:46:29 +01:00
if ( ! empty ( $fileoldalias ))
{
2018-06-14 16:33:11 +02:00
dol_syslog ( " We delete old alias page name= " . $fileoldalias . " to build a new alias page= " . $filealias );
2018-02-19 16:46:29 +01:00
dol_delete_file ( $fileoldalias );
}
2018-06-14 16:33:11 +02:00
// Now delete the alternative alias.php pages
if ( ! empty ( $objectpage -> old_object -> aliasalt ))
{
$tmpaltaliases = explode ( ',' , $objectpage -> old_object -> aliasalt );
if ( is_array ( $tmpaltaliases ))
{
foreach ( $tmpaltaliases as $tmpaliasalt )
{
dol_syslog ( " We delete old alt alias pages name= " . trim ( $tmpaliasalt ));
dol_delete_file ( $pathofwebsite . '/' . trim ( $tmpaliasalt ) . '.php' );
}
}
}
2016-08-08 18:25:37 +02:00
2018-02-19 16:46:29 +01:00
// Save page alias
$result = dolSavePageAlias ( $filealias , $object , $objectpage );
if ( ! $result ) setEventMessages ( 'Failed to write file ' . $filealias , null , 'errors' );
2018-06-14 16:33:11 +02:00
// Save alt aliases
if ( ! empty ( $objectpage -> aliasalt ))
{
$tmpaltaliases = explode ( ',' , $objectpage -> aliasalt );
if ( is_array ( $tmpaltaliases ))
{
foreach ( $tmpaltaliases as $tmpaliasalt )
{
$result = dolSavePageAlias ( $pathofwebsite . '/' . trim ( $tmpaliasalt ) . '.php' , $object , $objectpage );
if ( ! $result ) setEventMessages ( 'Failed to write file ' . $pathofwebsite . '/' . trim ( $tmpaliasalt ) . '.php' , null , 'errors' );
}
}
}
2017-10-07 13:09:31 +02:00
2018-02-19 16:46:29 +01:00
// Save page of content
$result = dolSavePageContent ( $filetpl , $object , $objectpage );
if ( $result )
{
setEventMessages ( $langs -> trans ( " Saved " ), null , 'mesgs' );
2018-07-22 17:18:35 +02:00
//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
2018-02-19 16:46:29 +01:00
//exit;
2017-10-07 13:09:31 +02:00
}
else
{
2018-02-19 16:46:29 +01:00
setEventMessages ( 'Failed to write file ' . $filetpl , null , 'errors' );
2018-07-22 17:18:35 +02:00
//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
2018-02-19 16:46:29 +01:00
//exit;
2017-10-07 13:09:31 +02:00
}
2018-02-19 16:46:29 +01:00
$action = 'preview' ;
2017-10-07 13:09:31 +02:00
}
2016-05-01 16:34:50 +02:00
}
2016-04-23 21:34:10 +02:00
// Update page
2017-08-03 01:45:31 +02:00
if (( $action == 'updatesource' || $action == 'updatecontent' || $action == 'confirm_createfromclone' || $action == 'confirm_createpagefromclone' )
2017-07-21 13:38:13 +02:00
|| ( $action == 'preview' && ( GETPOST ( 'refreshsite' ) || GETPOST ( 'refreshpage' ) || GETPOST ( 'preview' ))))
2016-04-23 21:34:10 +02:00
{
2018-07-22 17:18:35 +02:00
$object -> fetch ( 0 , $websitekey );
$website = $object ;
2016-05-01 16:34:50 +02:00
2017-08-03 01:45:31 +02:00
if ( $action == 'confirm_createfromclone' )
{
2018-09-25 20:34:05 +02:00
$db -> begin ();
2017-08-03 01:45:31 +02:00
$objectnew = new Website ( $db );
2019-01-27 11:55:16 +01:00
$result = $objectnew -> createFromClone ( $user , GETPOST ( 'id' , 'int' ), GETPOST ( 'siteref' , 'aZ09' ), ( GETPOST ( 'newlang' , 'aZ09' ) ? GETPOST ( 'newlang' , 'aZ09' ) : '' ));
2017-08-03 01:45:31 +02:00
if ( $result < 0 )
{
$error ++ ;
setEventMessages ( $objectnew -> error , $objectnew -> errors , 'errors' );
2017-08-21 00:40:45 +02:00
$action = 'preview' ;
2018-09-25 20:34:05 +02:00
$db -> rollback ();
2017-08-21 00:40:45 +02:00
}
else
{
$object = $objectnew ;
$id = $object -> id ;
$pageid = $object -> fk_default_home ;
2019-01-27 11:55:16 +01:00
$websitekey = GETPOST ( 'siteref' , 'aZ09' );
2018-09-25 20:34:05 +02:00
$db -> commit ();
2017-08-03 01:45:31 +02:00
}
}
2017-07-22 20:01:29 +02:00
if ( $action == 'confirm_createpagefromclone' )
2017-07-21 13:38:13 +02:00
{
2019-01-27 11:55:16 +01:00
$istranslation = ( GETPOST ( 'is_a_translation' , 'aZ09' ) == 'on' ? 1 : 0 );
2017-07-22 20:01:29 +02:00
if ( $istranslation )
2017-07-21 13:38:13 +02:00
{
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'newlang' , 'aZ09' ) == $objectpage -> lang )
2017-07-22 20:01:29 +02:00
{
$error ++ ;
setEventMessages ( $langs -> trans ( " LanguageMustNotBeSameThanClonedPage " ), null , 'errors' );
$action = 'preview' ;
}
2017-07-21 13:38:13 +02:00
}
2017-07-22 20:01:29 +02:00
if ( ! $error )
{
2018-09-25 20:34:05 +02:00
$db -> begin ();
2019-01-27 11:55:16 +01:00
$newwebsiteid = GETPOST ( 'newwebsite' , 'int' );
2018-09-25 20:34:05 +02:00
$pathofwebsitenew = $pathofwebsite ;
$tmpwebsite = new Website ( $db );
if ( $newwebsiteid > 0 && $newwebsiteid != $object -> id )
{
$tmpwebsite -> fetch ( $newwebsiteid );
$pathofwebsitenew = $dolibarr_main_data_root . '/website/' . $tmpwebsite -> ref ;
}
else
{
$tmpwebsite = $object ;
}
2017-10-07 13:09:31 +02:00
$objectpage = new WebsitePage ( $db );
2019-01-27 11:55:16 +01:00
$resultpage = $objectpage -> createFromClone ( $user , $pageid , GETPOST ( 'pageurl' , 'aZ09' ), ( GETPOST ( 'newlang' , 'aZ09' ) ? GETPOST ( 'newlang' , 'aZ09' ) : '' ), $istranslation , $newwebsiteid );
2018-09-25 20:34:05 +02:00
if ( $resultpage < 0 )
2017-07-22 20:01:29 +02:00
{
$error ++ ;
setEventMessages ( $objectpage -> error , $objectpage -> errors , 'errors' );
$action = 'createpagefromclone' ;
2018-09-25 20:34:05 +02:00
$db -> rollback ();
2017-07-22 20:01:29 +02:00
}
2017-10-26 14:16:59 +02:00
else
{
2018-09-25 20:34:05 +02:00
$fileindex = $pathofwebsitenew . '/index.php' ;
$filetpl = $pathofwebsitenew . '/page' . $resultpage -> id . '.tpl.php' ;
$filewrapper = $pathofwebsitenew . '/wrapper.php' ;
//var_dump($pathofwebsitenew);
//var_dump($filetpl);
//exit;
dolSavePageContent ( $filetpl , $tmpwebsite , $resultpage );
// Switch on the new page if web site of new page/container is same
if ( empty ( $newwebsiteid ) || $newwebsiteid == $object -> id )
{
$pageid = $resultpage -> id ;
}
$db -> commit ();
2017-10-26 14:16:59 +02:00
}
2017-07-22 20:01:29 +02:00
}
2017-10-07 13:09:31 +02:00
}
2017-07-03 02:09:14 +02:00
2017-10-07 13:09:31 +02:00
$res = 0 ;
2017-07-22 20:01:29 +02:00
2017-10-07 13:09:31 +02:00
if ( ! $error )
{
// Check symlink to medias and restore it if ko
$pathtomedias = DOL_DATA_ROOT . '/medias' ;
$pathtomediasinwebsite = $pathofwebsite . '/medias' ;
if ( ! is_link ( dol_osencode ( $pathtomediasinwebsite )))
{
dol_syslog ( " Create symlink for " . $pathtomedias . " into name " . $pathtomediasinwebsite );
dol_mkdir ( dirname ( $pathtomediasinwebsite )); // To be sure dir for website exists
$result = symlink ( $pathtomedias , $pathtomediasinwebsite );
}
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
/* if ( GETPOST ( 'savevirtualhost' ) && $object -> virtualhost != GETPOST ( 'previewsite' ))
2017-07-22 20:01:29 +02:00
{
$object -> virtualhost = GETPOST ( 'previewsite' , 'alpha' );
$object -> update ( $user );
} */
2016-05-02 20:27:34 +02:00
2017-10-07 13:09:31 +02:00
$objectpage -> fk_website = $object -> id ;
2017-07-22 20:01:29 +02:00
2017-10-07 13:09:31 +02:00
if ( $pageid > 0 )
{
$res = $objectpage -> fetch ( $pageid );
}
else
{
$res = 0 ;
if ( $object -> fk_default_home > 0 )
{
$res = $objectpage -> fetch ( $object -> fk_default_home );
}
if ( ! ( $res > 0 ))
{
$res = $objectpage -> fetch ( 0 , $object -> id );
}
}
}
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
if ( ! $error && $res > 0 )
{
if ( $action == 'updatesource' || $action == 'updatecontent' )
{
$db -> begin ();
2017-07-02 23:38:19 +02:00
2019-04-30 13:05:13 +02:00
$phpfullcodestringold = dolKeepOnlyPhpCode ( $objectpage -> content );
2019-01-27 11:55:16 +01:00
$objectpage -> content = GETPOST ( 'PAGE_CONTENT' , 'none' );
2017-07-02 23:38:19 +02:00
2019-04-25 23:21:25 +02:00
// Security analysis
$phpfullcodestring = dolKeepOnlyPhpCode ( $objectpage -> content );
//print dol_escape_htmltag($phpfullcodestring);exit;
$forbiddenphpcommands = array ( " exec " , " passthru " , " system " , " shell_exec " , " proc_open " );
if ( empty ( $conf -> global -> WEBSITE_PHP_ALLOW_WRITE )) // If option is not on, we disallow functions to write files
{
$forbiddenphpcommands = array_merge ( $forbiddenphpcommands , array ( " fopen " , " file_put_contents " , " fputs " , " fputscsv " , " fwrite " , " fpassthru " , " unlink " , " mkdir " , " rmdir " , " symlink " , " touch " , " umask " ));
}
foreach ( $forbiddenphpcommands as $forbiddenphpcommand )
{
if ( preg_match ( '/' . $forbiddenphpcommand . '\s*\(/ms' , $phpfullcodestring ))
{
$error ++ ;
setEventMessages ( $langs -> trans ( " DynamicPHPCodeContainsAForbiddenInstruction " , $forbiddenphpcommand ), null , 'errors' );
if ( $action == 'updatesource' ) $action = 'editsource' ;
if ( $action == 'updatecontent' ) $action = 'editcontent' ;
}
}
2019-04-30 13:05:13 +02:00
if ( empty ( $user -> rights -> website -> writephp ))
{
if ( $phpfullcodestringold != $phpfullcodestring )
{
$error ++ ;
setEventMessages ( $langs -> trans ( " NotAllowedToAddDynamicContent " ), null , 'errors' );
if ( $action == 'updatesource' ) $action = 'editsource' ;
if ( $action == 'updatecontent' ) $action = 'editcontent' ;
}
}
2019-04-25 23:21:25 +02:00
2017-10-07 13:09:31 +02:00
// Clean data. We remove all the head section.
2018-09-25 15:00:37 +02:00
$objectpage -> content = preg_replace ( '/<head>.*<\/head>/ims' , '' , $objectpage -> content );
2017-10-07 13:09:31 +02:00
/* $objectpage->content = preg_replace('/<base\s+href=[\'"][^\'"]+[\'"]\s/?>/s', '', $objectpage->content); */
2017-08-21 03:13:44 +02:00
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
$res = $objectpage -> update ( $user );
if ( $res < 0 )
{
$error ++ ;
setEventMessages ( $objectpage -> error , $objectpage -> errors , 'errors' );
2019-04-25 23:21:25 +02:00
if ( $action == 'updatesource' ) $action = 'editsource' ;
if ( $action == 'updatecontent' ) $action = 'editcontent' ;
2017-10-07 13:09:31 +02:00
}
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
if ( ! $error )
{
$db -> commit ();
$filemaster = $pathofwebsite . '/master.inc.php' ;
//$fileoldalias=$pathofwebsite.'/'.$objectpage->old_object->pageurl.'.php';
$filealias = $pathofwebsite . '/' . $objectpage -> pageurl . '.php' ;
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
dol_mkdir ( $pathofwebsite );
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
// Now generate the master.inc.php page
2018-09-10 23:20:31 +02:00
$result = dolSaveMasterFile ( $filemaster );
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
if ( ! $result ) setEventMessages ( 'Failed to write file ' . $filemaster , null , 'errors' );
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
// Now generate the alias.php page
if ( ! empty ( $fileoldalias ))
{
dol_syslog ( " We regenerate alias page new name= " . $filealias . " , old name= " . $fileoldalias );
dol_delete_file ( $fileoldalias );
}
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
// Save page alias
$result = dolSavePageAlias ( $filealias , $object , $objectpage );
if ( ! $result ) setEventMessages ( 'Failed to write file ' . $filealias , null , 'errors' );
2017-07-02 23:38:19 +02:00
2017-07-28 15:32:15 +02:00
// Save page content
2017-10-07 13:09:31 +02:00
$result = dolSavePageContent ( $filetpl , $object , $objectpage );
if ( $result )
{
setEventMessages ( $langs -> trans ( " Saved " ), null , 'mesgs' );
2018-07-22 17:18:35 +02:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . $websitekey . '&pageid=' . $pageid );
2017-10-07 13:09:31 +02:00
exit ;
}
else
{
setEventMessages ( 'Failed to write file ' . $filetpl , null , 'errors' );
2018-07-22 17:18:35 +02:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . $websitekey . '&pageid=' . $pageid );
2017-10-07 13:09:31 +02:00
exit ;
}
}
else
{
$db -> rollback ();
}
}
else
{
2018-07-22 17:18:35 +02:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . $websitekey . '&pageid=' . $pageid );
2017-10-07 13:09:31 +02:00
exit ;
}
}
else
{
2018-08-16 21:48:16 +02:00
if ( ! $error )
{
2018-12-17 17:29:04 +01:00
if ( empty ( $websitekey ) || $websitekey == '-1' )
{
setEventMessages ( $langs -> trans ( " NoWebSiteCreateOneFirst " ), null , 'warnings' );
}
else
{
setEventMessages ( $langs -> trans ( " NoPageYet " ), null , 'warnings' );
setEventMessages ( $langs -> trans ( " YouCanCreatePageOrImportTemplate " ), null , 'warnings' );
}
2018-08-16 21:48:16 +02:00
}
2017-10-07 13:09:31 +02:00
}
2016-04-23 21:34:10 +02:00
}
2016-01-24 21:35:41 +01:00
2017-09-01 11:10:03 +02:00
// Export site
2018-08-15 14:24:33 +02:00
if ( $action == 'exportsite' )
2017-09-01 11:10:03 +02:00
{
2017-11-05 03:39:27 +01:00
$fileofzip = $object -> exportWebSite ();
2017-09-01 11:10:03 +02:00
2017-12-11 18:25:23 +01:00
if ( $fileofzip )
{
$file_name = basename ( $fileofzip );
2017-09-01 11:10:03 +02:00
2017-12-11 18:25:23 +01:00
header ( " Content-Type: application/zip " );
header ( " Content-Disposition: attachment; filename= " . $file_name );
header ( " Content-Length: " . filesize ( $fileofzip ));
2017-09-01 11:10:03 +02:00
2017-12-11 18:25:23 +01:00
readfile ( $fileofzip );
exit ;
}
2019-08-14 01:43:06 +02:00
else
{
setEventMessages ( $object -> error , $object -> errors , 'errors' );
2019-08-14 02:46:09 +02:00
$action = '' ;
2019-08-14 01:43:06 +02:00
}
2017-09-01 11:10:03 +02:00
}
2018-08-15 14:24:33 +02:00
// Import site
if ( $action == 'importsiteconfirm' )
{
2019-08-12 22:19:24 +02:00
if ( empty ( $_FILES ) && ! GETPOSTISSET ( 'templateuserfile' ))
2018-08-16 00:03:19 +02:00
{
setEventMessages ( $langs -> trans ( " ErrorFieldRequired " , $langs -> transnoentitiesnoconv ( " File " )), null , 'errors' );
$action = 'importsite' ;
}
else
{
2019-08-12 22:19:24 +02:00
if ( ! empty ( $_FILES ) || GETPOSTISSET ( 'templateuserfile' ))
2018-08-16 21:48:16 +02:00
{
2018-09-10 21:25:30 +02:00
// Check symlink to medias and restore it if ko
$pathtomedias = DOL_DATA_ROOT . '/medias' ;
$pathtomediasinwebsite = $pathofwebsite . '/medias' ;
if ( ! is_link ( dol_osencode ( $pathtomediasinwebsite )))
{
dol_syslog ( " Create symlink for " . $pathtomedias . " into name " . $pathtomediasinwebsite );
dol_mkdir ( dirname ( $pathtomediasinwebsite )); // To be sure dir for website exists
$result = symlink ( $pathtomedias , $pathtomediasinwebsite );
if ( ! $result )
{
setEventMessages ( $langs -> trans ( " ErrorFieldToCreateSymLinkToMedias " , $pathtomediasinwebsite , $pathtomedias ), null , 'errors' );
$action = 'importsite' ;
}
}
2019-08-12 22:19:24 +02:00
$fileofzip = '' ;
if ( GETPOSTISSET ( 'templateuserfile' ))
{
$fileofzip = DOL_DATA_ROOT . '/doctemplates/websites/' . GETPOST ( 'templateuserfile' , 'alpha' );
}
elseif ( ! empty ( $_FILES ))
2018-08-16 21:48:16 +02:00
{
2019-08-12 22:19:24 +02:00
if ( is_array ( $_FILES [ 'userfile' ][ 'tmp_name' ])) $userfiles = $_FILES [ 'userfile' ][ 'tmp_name' ];
else $userfiles = array ( $_FILES [ 'userfile' ][ 'tmp_name' ]);
foreach ( $userfiles as $key => $userfile )
2018-08-16 21:48:16 +02:00
{
2019-08-12 22:19:24 +02:00
if ( empty ( $_FILES [ 'userfile' ][ 'tmp_name' ][ $key ]))
{
$error ++ ;
if ( $_FILES [ 'userfile' ][ 'error' ][ $key ] == 1 || $_FILES [ 'userfile' ][ 'error' ][ $key ] == 2 ){
setEventMessages ( $langs -> trans ( 'ErrorFileSizeTooLarge' ), null , 'errors' );
$action = 'importsite' ;
}
else {
setEventMessages ( $langs -> trans ( " ErrorFieldRequired " , $langs -> transnoentitiesnoconv ( " File " )), null , 'errors' );
$action = 'importsite' ;
}
2018-08-16 21:48:16 +02:00
}
}
2018-08-15 14:24:33 +02:00
2019-08-12 22:19:24 +02:00
if ( ! $error )
{
$upload_dir = $conf -> website -> dir_temp ;
$result = dol_add_file_process ( $upload_dir , 1 , - 1 , 'userfile' , '' );
}
2018-08-16 21:48:16 +02:00
// Get name of file (take last one if several name provided)
$fileofzip = $upload_dir . '/unknown' ;
foreach ( $_FILES as $key => $ifile )
{
foreach ( $ifile [ 'name' ] as $key2 => $ifile2 )
{
$fileofzip = $upload_dir . '/' . $ifile2 ;
}
}
2019-08-12 22:19:24 +02:00
}
2018-08-16 21:48:16 +02:00
2019-08-12 22:19:24 +02:00
if ( ! $error )
{
2018-08-16 21:48:16 +02:00
$result = $object -> importWebSite ( $fileofzip );
if ( $result < 0 )
{
setEventMessages ( $object -> error , $object -> errors , 'errors' );
$action = 'importsite' ;
}
else
{
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . '?website=' . $object -> ref );
exit ();
}
}
2018-08-16 00:03:19 +02:00
}
}
2018-08-15 14:24:33 +02:00
}
2016-01-24 21:35:41 +01:00
2016-02-02 16:24:12 +01:00
/*
* View
*/
$form = new Form ( $db );
2017-07-22 20:01:29 +02:00
$formadmin = new FormAdmin ( $db );
2017-07-23 16:20:53 +02:00
$formwebsite = new FormWebsite ( $db );
2018-02-19 19:47:42 +01:00
$formother = new FormOther ( $db );
2016-02-02 16:24:12 +01:00
$help_url = '' ;
2017-10-13 13:22:24 +02:00
$arrayofjs = array (
'/includes/ace/ace.js' ,
'/includes/ace/ext-statusbar.js' ,
'/includes/ace/ext-language_tools.js' ,
//'/includes/ace/ext-chromevox.js'
2017-12-17 16:24:47 +01:00
//'/includes/jquery/plugins/jqueryscoped/jquery.scoped.js',
2017-10-13 13:22:24 +02:00
);
$arrayofcss = array ();
2017-11-05 02:04:05 +01:00
$moreheadcss = '' ;
$moreheadjs = '' ;
$arrayofjs [] = 'includes/jquery/plugins/blockUI/jquery.blockUI.js' ;
2018-02-28 14:36:22 +01:00
$arrayofjs [] = 'core/js/blockUI.js' ; // Used by ecm/tpl/enabledfiletreeajax.tpl.php
2017-11-05 02:04:05 +01:00
if ( empty ( $conf -> global -> MAIN_ECM_DISABLE_JS )) $arrayofjs [] = " includes/jquery/plugins/jqueryFileTree/jqueryFileTree.js " ;
$moreheadjs .= '<script type="text/javascript">' . " \n " ;
$moreheadjs .= 'var indicatorBlockUI = \'' . DOL_URL_ROOT . " /theme/ " . $conf -> theme . " /img/working.gif " . '\';' . " \n " ;
$moreheadjs .= '</script>' . " \n " ;
2018-11-26 14:37:19 +01:00
llxHeader ( $moreheadcss . $moreheadjs , $langs -> trans ( " WebsiteSetup " ), $help_url , '' , 0 , 0 , $arrayofjs , $arrayofcss , '' , '' , '<!-- Begin div class="fiche" -->' . " \n " . '<div class="fichebutwithotherclass">' );
2016-04-12 19:17:50 +02:00
2019-08-13 00:34:42 +02:00
print " \n " ;
print '<form action="' . $_SERVER [ " PHP_SELF " ] . '" method="POST" enctype="multipart/form-data">' ;
2016-04-23 21:34:10 +02:00
print '<input type="hidden" name="token" value="' . $_SESSION [ 'newtoken' ] . '">' ;
2019-08-13 00:34:42 +02:00
2017-09-01 12:19:55 +02:00
if ( $action == 'createsite' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="addsite">' ;
2017-09-01 12:19:55 +02:00
}
2017-12-12 01:40:34 +01:00
if ( $action == 'createcontainer' )
2016-04-23 21:34:10 +02:00
{
2017-12-12 01:40:34 +01:00
print '<input type="hidden" name="action" value="addcontainer">' ;
2016-04-23 21:34:10 +02:00
}
2016-05-01 16:34:50 +02:00
if ( $action == 'editcss' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="updatecss">' ;
2016-05-01 16:34:50 +02:00
}
if ( $action == 'editmenu' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="updatemenu">' ;
2016-05-01 16:34:50 +02:00
}
2016-05-02 15:51:18 +02:00
if ( $action == 'setashome' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="updateashome">' ;
2016-05-02 15:51:18 +02:00
}
2016-05-01 16:34:50 +02:00
if ( $action == 'editmeta' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="updatemeta">' ;
2016-05-01 16:34:50 +02:00
}
2017-07-22 20:19:10 +02:00
if ( $action == 'editsource' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="updatesource">' ;
2017-07-22 20:19:10 +02:00
}
2016-04-23 21:34:10 +02:00
if ( $action == 'editcontent' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="updatecontent">' ;
2016-04-23 21:34:10 +02:00
}
if ( $action == 'edit' )
{
2017-10-07 13:09:31 +02:00
print '<input type="hidden" name="action" value="update">' ;
2016-04-23 21:34:10 +02:00
}
2018-08-15 14:24:33 +02:00
if ( $action == 'importsite' )
{
print '<input type="hidden" name="action" value="importsiteconfirm">' ;
}
2017-11-18 15:41:30 +01:00
if ( $action == 'file_manager' )
{
print '<input type="hidden" name="action" value="file_manager">' ;
}
2019-05-28 16:10:11 +02:00
if ( $action == 'replacesite' )
{
2019-08-13 00:34:42 +02:00
print '<input type="hidden" name="action" value="replacesiteconfirm">' ;
}
if ( $action == 'replacesiteconfirm' )
{
print '<input type="hidden" name="action" value="replacesiteconfirm">' ;
2019-05-28 16:10:11 +02:00
}
2016-02-02 16:24:12 +01:00
2017-11-15 19:47:07 +01:00
print '<div>' ;
2016-02-02 16:24:12 +01:00
2016-04-23 21:34:10 +02:00
// Add a margin under toolbar ?
2016-04-19 11:02:55 +02:00
$style = '' ;
2017-07-22 20:19:10 +02:00
if ( $action != 'preview' && $action != 'editcontent' && $action != 'editsource' ) $style = ' margin-bottom: 5px;' ;
2016-04-23 21:34:10 +02:00
2017-12-12 01:40:34 +01:00
2017-11-10 15:29:12 +01:00
if ( ! GETPOST ( 'hide_websitemenu' ))
{
2018-12-17 17:29:04 +01:00
//var_dump($objectpage);exit;
print '<div class="centpercent websitebar">' ;
2016-04-12 19:17:50 +02:00
2017-10-07 13:09:31 +02:00
// ***** Part for web sites
2018-11-27 16:20:31 +01:00
print '<!-- Bar for website -->' ;
2017-11-15 19:47:07 +01:00
print '<div class="websiteselection hideonsmartphoneimp minwidth100 tdoverflowmax100">' ;
print $langs -> trans ( " Website " ) . ' : ' ;
2017-09-01 12:19:55 +02:00
print '</div>' ;
2017-10-20 23:48:42 +02:00
print '<div class="websiteselection hideonsmartphoneimp">' ;
2017-11-15 19:47:07 +01:00
print ' <input type="submit"' . $disabled . ' class="button" value="' . dol_escape_htmltag ( $langs -> trans ( " Add " )) . '" name="createsite">' ;
2017-10-07 13:09:31 +02:00
print '</div>' ;
2017-10-20 21:39:19 +02:00
// List of website
2017-10-20 23:48:42 +02:00
print '<div class="websiteselection">' ;
2017-10-07 13:09:31 +02:00
$out = '' ;
$out .= '<select name="website" class="minwidth100" id="website">' ;
if ( empty ( $object -> records )) $out .= '<option value="-1"> </option>' ;
// Loop on each sites
$i = 0 ;
foreach ( $object -> records as $key => $valwebsite )
{
2018-07-22 17:18:35 +02:00
if ( empty ( $websitekey )) $websitekey = $valwebsite -> ref ;
2017-10-07 13:09:31 +02:00
$out .= '<option value="' . $valwebsite -> ref . '"' ;
2018-07-22 17:18:35 +02:00
if ( $websitekey == $valwebsite -> ref ) $out .= ' selected' ; // To preselect a value
2017-10-07 13:09:31 +02:00
$out .= '>' ;
$out .= $valwebsite -> ref ;
$out .= '</option>' ;
$i ++ ;
}
$out .= '</select>' ;
$out .= ajax_combobox ( 'website' );
print $out ;
2017-11-15 19:47:07 +01:00
//print '<input type="submit" class="button" name="refreshsite" value="'.$langs->trans("Load").'">';
2019-04-05 11:34:06 +02:00
print '<input type="image" class="valignmiddle" src="' . img_picto ( '' , 'refresh' , '' , 0 , 1 ) . '" name="refreshsite" value="' . $langs -> trans ( " Load " ) . '">' ;
2017-11-15 19:47:07 +01:00
2017-10-07 13:09:31 +02:00
2018-07-22 17:18:35 +02:00
if ( $websitekey )
2017-10-07 13:09:31 +02:00
{
$virtualurl = '' ;
2018-07-22 17:18:35 +02:00
$dataroot = DOL_DATA_ROOT . '/website/' . $websitekey ;
2017-10-07 13:09:31 +02:00
if ( ! empty ( $object -> virtualhost )) $virtualurl = $object -> virtualhost ;
}
2018-12-17 17:29:04 +01:00
$array = array ();
if ( $object -> id > 0 )
{
$array = $objectpage -> fetchAll ( $object -> id , 'ASC,ASC' , 'type_container,pageurl' );
}
2018-08-15 14:24:33 +02:00
if ( ! is_array ( $array ) && $array < 0 ) dol_print_error ( '' , $objectpage -> error , $objectpage -> errors );
$atleastonepage = ( is_array ( $array ) && count ( $array ) > 0 );
2019-06-02 17:27:00 +02:00
if ( $websitekey && $websitekey != '-1' && ( $action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite' ))
2017-10-07 13:09:31 +02:00
{
$disabled = '' ;
2017-10-20 21:39:19 +02:00
if ( empty ( $user -> rights -> website -> write )) $disabled = ' disabled="disabled"' ;
2017-08-20 21:23:19 +02:00
print ' ' ;
2017-11-15 19:47:07 +01:00
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " EditCss " )) . '" name="editcss">' ;
2019-05-28 16:10:11 +02:00
2018-08-15 14:24:33 +02:00
if ( ! $atleastonepage )
{
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " ImportSite " )) . '" name="importsite">' ;
}
else
{
print '<input type="submit" class="button nobordertransp" disabled="disabled" value="' . dol_escape_htmltag ( $langs -> trans ( " ImportSite " )) . '" name="importsite">' ;
}
2017-07-02 23:38:19 +02:00
2019-05-28 16:10:11 +02:00
//print '<input type="submit" class="button"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditMenu")).'" name="editmenu">';
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " CloneSite " )) . '" name="createfromclone">' ;
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " ExportSite " )) . '" name="exportsite">' ;
2018-09-08 12:04:40 +02:00
print '<input type="submit" class="buttonDelete" name="deletesite" value="' . $langs -> trans ( " Delete " ) . '"' . ( $atleastonepage ? ' disabled="disabled"' : '' ) . '>' ;
2017-10-07 13:09:31 +02:00
print ' ' ;
2016-04-27 09:41:42 +02:00
2019-05-28 16:10:11 +02:00
print '<a href="' . $_SERVER [ " PHP_SEFL " ] . '?action=file_manager&website=' . $website -> ref . '" class="button nobordertransp"' . $disabled . ' title="' . dol_escape_htmltag ( $langs -> trans ( " MediaFiles " )) . '"><span class="fa fa-image"><span></a>' ;
//print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("MediaFiles")).'" name="file_manager">';
2017-11-10 15:29:12 +01:00
/* print '<a class="button button_file_manager"' . $disabled . '>' . dol_escape_htmltag ( $langs -> trans ( " MediaFiles " )) . '</a>' ;
print ' < script language = " javascript " >
jQuery ( document ) . ready ( function () {
jQuery ( " .button_file_manager " ) . click ( function () {
2018-07-22 17:18:35 +02:00
var $dialog = $ ( \ '<div></div>\').html(\'<iframe style="border: 0px;" src="' . DOL_URL_ROOT . '/website/index.php?hide_websitemenu=1&dol_hide_topmenu=1&dol_hide_leftmenu=1&file_manager=1&website=' . $websitekey . '&pageid=' . $pageid . ' " width= " 100 % " height= " 100 % " ></iframe> \ ')
2017-11-10 15:29:12 +01:00
. dialog ({
autoOpen : false ,
modal : true ,
height : 500 ,
width : \ ' 80 % \ ' ,
title : " '.dol_escape_js( $langs->trans ( " FileManager " )).' "
});
$dialog . dialog ( \ ' open\ ' );
});
});
</ script > ' ;
*/
2019-05-28 16:10:11 +02:00
2019-06-02 17:27:00 +02:00
print '<a href="' . $_SERVER [ " PHP_SEFL " ] . '?action=replacesite&website=' . $website -> ref . '" class="button nobordertransp"' . $disabled . ' title="' . dol_escape_htmltag ( $langs -> trans ( " ReplaceWebsiteContent " )) . '"><span class="fa fa-file-code"><span></a>' ;
2017-10-07 13:09:31 +02:00
}
print '</div>' ;
2016-04-27 09:41:42 +02:00
2018-08-15 14:24:33 +02:00
2018-09-25 15:00:37 +02:00
// Toolbar for websites
2019-01-23 15:30:54 +01:00
print '<div class="websitetools websiteselection">' ;
2017-10-07 02:29:27 +02:00
2019-06-02 17:27:00 +02:00
if ( $action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite' )
2017-10-07 13:09:31 +02:00
{
2018-02-19 21:31:03 +01:00
$urlext = $virtualurl ;
2018-07-22 17:18:35 +02:00
$urlint = $urlwithroot . '/public/website/index.php?website=' . $websitekey ;
2018-02-19 21:31:03 +01:00
2019-01-23 15:30:54 +01:00
print '<div class="websiteinputurl valignmiddle" id="websiteinputurl">' ;
2019-01-23 14:57:43 +01:00
$linktotestonwebserver = '<a href="' . ( $virtualurl ? $virtualurl : '#' ) . '" class="valignmiddle">' ;
2019-01-27 11:55:16 +01:00
$linktotestonwebserver .= $langs -> trans ( " TestDeployOnWeb " , $virtualurl ) . ' ' . img_picto ( '' , 'object_globe' );
2019-01-23 14:57:43 +01:00
$linktotestonwebserver .= '</a>' ;
$htmltext = '' ;
2018-02-15 01:29:51 +01:00
if ( empty ( $object -> fk_default_home ))
{
2019-01-23 15:06:28 +01:00
$htmltext .= '<br><span class="error">' . $langs -> trans ( " YouMustDefineTheHomePage " ) . '</span><br><br>' ;
2019-01-23 14:57:43 +01:00
}
2019-01-23 15:06:28 +01:00
elseif ( empty ( $virtualurl ))
2019-01-23 14:57:43 +01:00
{
2019-01-23 15:06:28 +01:00
$htmltext .= '<br><span class="error">' . $langs -> trans ( " VirtualHostUrlNotDefined " ) . '</span><br><br>' ;
2018-02-15 01:29:51 +01:00
}
else
{
2019-01-23 14:57:43 +01:00
$htmltext .= '<br><center>' . $langs -> trans ( " GoTo " ) . ' <a href="' . $virtualurl . '" target="_website">' . $virtualurl . '</a></center><br>' ;
2018-02-15 01:29:51 +01:00
}
2019-01-23 14:57:43 +01:00
if ( ! empty ( $conf -> global -> WEBSITE_REPLACE_INFO_ABOUT_USAGE_WITH_WEBSERVER ))
{
2019-04-27 19:41:47 +02:00
$htmltext .= '<br>' . $langs -> trans ( $conf -> global -> WEBSITE_REPLACE_INFO_ABOUT_USAGE_WITH_WEBSERVER );
2019-01-23 14:57:43 +01:00
}
else
{
$htmltext .= $langs -> trans ( " SetHereVirtualHost " , $dataroot );
$htmltext .= '<br>' ;
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " ReadPerm " ), DOL_DOCUMENT_ROOT );
2019-01-26 01:31:22 +01:00
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " WritePerm " ), DOL_DATA_ROOT . '/website<br>' . DOL_DATA_ROOT . '/medias' );
2019-01-23 14:57:43 +01:00
$htmltext .= '<br>' ;
$htmltext .= '<br>' ;
$htmltext .= $langs -> trans ( " YouCanAlsoTestWithPHPS " , $dataroot );
2019-08-15 18:37:57 +02:00
$htmltext .= '<br>' ;
$htmltext .= '<br>' ;
$htmltext .= $langs -> trans ( " YouCanAlsoDeployToAnotherWHP " );
2019-01-23 14:57:43 +01:00
}
2019-01-23 15:30:54 +01:00
print $form -> textwithpicto ( $linktotestonwebserver , $htmltext , 1 , 'none' , 'valignmiddle' , 0 , 2 , 'helpvirtualhost' );
2019-01-23 14:57:43 +01:00
print '</div>' ;
2017-10-07 13:09:31 +02:00
}
2017-07-02 23:38:19 +02:00
2019-08-13 00:34:42 +02:00
if ( in_array ( $action , array ( 'editcss' , 'editmenu' , 'file_manager' , 'replacesite' , 'replacesiteconfirm' )))
2017-10-07 13:09:31 +02:00
{
2019-08-13 00:34:42 +02:00
if ( preg_match ( '/^create/' , $action ) && $action != 'file_manager' && $action != 'replacesite' && $action != 'replacesiteconfirm' ) print '<input type="submit" id="savefile" class="button buttonforacesave" value="' . dol_escape_htmltag ( $langs -> trans ( " Save " )) . '" name="update">' ;
if ( preg_match ( '/^edit/' , $action ) && $action != 'file_manager' && $action != 'replacesite' && $action != 'replacesiteconfirm' ) print '<input type="submit" id="savefile" class="button buttonforacesave" value="' . dol_escape_htmltag ( $langs -> trans ( " Save " )) . '" name="update">' ;
2017-10-07 13:09:31 +02:00
if ( $action != 'preview' ) print '<input type="submit" class="button" value="' . dol_escape_htmltag ( $langs -> trans ( " Cancel " )) . '" name="preview">' ;
}
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ;
2017-07-02 23:38:19 +02:00
2016-04-27 09:41:42 +02:00
2018-08-15 14:24:33 +02:00
// Toolbar for pages
2016-04-27 09:41:42 +02:00
2018-12-17 17:29:04 +01:00
if ( $websitekey && $websitekey != '-1' && ! in_array ( $action , array ( 'editcss' , 'editmenu' , 'importsite' )))
2017-10-07 13:09:31 +02:00
{
print '</div>' ; // Close current websitebar to open a new one
2017-07-02 23:38:19 +02:00
2018-11-27 16:20:31 +01:00
print '<!-- Bar for websitepage -->' ;
2017-10-07 13:09:31 +02:00
print '<div class="centpercent websitebar"' . ( $style ? ' style="' . $style . '"' : '' ) . '">' ;
2017-07-02 23:38:19 +02:00
2017-11-15 19:47:07 +01:00
print '<div class="websiteselection hideonsmartphoneimp minwidth100 tdoverflowmax100">' ;
print $langs -> trans ( " PageContainer " ) . ': ' ;
2017-10-07 13:09:31 +02:00
print '</div>' ;
2017-07-21 13:38:13 +02:00
2017-10-20 23:48:42 +02:00
print '<div class="websiteselection hideonsmartphoneimp">' ;
2017-12-12 01:40:34 +01:00
print '<input type="submit"' . $disabled . ' class="button" value="' . dol_escape_htmltag ( $langs -> trans ( " Add " )) . '" name="createcontainer">' ;
2017-10-07 13:09:31 +02:00
print '</div>' ;
2017-11-15 19:47:07 +01:00
2017-10-20 23:48:42 +02:00
print '<div class="websiteselection">' ;
2017-07-21 13:38:13 +02:00
2017-12-12 01:40:34 +01:00
if ( $action != 'addcontainer' )
2017-10-07 13:09:31 +02:00
{
$out = '' ;
2019-01-04 18:39:02 +01:00
if ( $atleastonepage && $action != 'editsource' )
{
$out .= '<select name="pageid" id="pageid" class="minwidth200 maxwidth300">' ;
}
else
{
$out .= '<select name="pageidbis" id="pageid" class="minwidth200 maxwidth300" disabled="disabled">' ;
}
2017-10-07 13:09:31 +02:00
if ( $atleastonepage )
{
2017-12-12 01:40:34 +01:00
if ( empty ( $pageid ) && $action != 'createcontainer' ) // Page id is not defined, we try to take one
2017-10-07 13:09:31 +02:00
{
$firstpageid = 0 ; $homepageid = 0 ;
foreach ( $array as $key => $valpage )
{
if ( empty ( $firstpageid )) $firstpageid = $valpage -> id ;
if ( $object -> fk_default_home && $key == $object -> fk_default_home ) $homepageid = $valpage -> id ;
}
$pageid = $homepageid ? $homepageid : $firstpageid ; // We choose home page and if not defined yet, we take first page
}
foreach ( $array as $key => $valpage )
{
$out .= '<option value="' . $key . '"' ;
if ( $pageid > 0 && $pageid == $key ) $out .= ' selected' ; // To preselect a value
$out .= '>' ;
2018-09-25 15:00:37 +02:00
$out .= '[' . $valpage -> type_container . ' ' . sprintf ( " %03d " , $valpage -> id ) . '] ' ;
2017-10-07 13:09:31 +02:00
$out .= $valpage -> pageurl . ' - ' . $valpage -> title ;
if ( $object -> fk_default_home && $key == $object -> fk_default_home ) $out .= ' (' . $langs -> trans ( " HomePage " ) . ')' ;
$out .= '</option>' ;
}
}
else $out .= '<option value="-1"> </option>' ;
$out .= '</select>' ;
2019-01-04 18:39:02 +01:00
if ( $atleastonepage && $action != 'editsource' )
{
$out .= ajax_combobox ( 'pageid' );
}
else
{
$out .= '<input type="hidden" name="pageid" value="' . $pageid . '">' ;
$out .= ajax_combobox ( 'pageid' );
}
2017-10-07 13:09:31 +02:00
print $out ;
}
else
{
print $langs -> trans ( " New " );
}
2017-07-02 23:38:19 +02:00
2017-11-15 19:47:07 +01:00
//print '<input type="submit" class="button" name="refreshpage" value="'.$langs->trans("Load").'"'.($atleastonepage?'':' disabled="disabled"').'>';
2019-01-03 22:39:51 +01:00
print '<input type="image" class="valignmiddle" src="' . img_picto ( '' , 'refresh' , '' , 0 , 1 ) . '" name="refreshpage" value="' . $langs -> trans ( " Load " ) . '"' . (( $atleastonepage && $action != 'editsource' ) ? '' : ' disabled="disabled"' ) . '>' ;
2016-08-08 14:21:43 +02:00
2018-05-25 17:47:03 +02:00
// Print nav arrows
$pagepreviousid = 0 ;
$pagenextid = 0 ;
2018-06-11 09:22:50 +02:00
if ( $pageid )
2018-05-25 17:47:03 +02:00
{
2018-06-11 09:22:50 +02:00
$sql = 'SELECT MAX(rowid) as pagepreviousid FROM ' . MAIN_DB_PREFIX . 'website_page WHERE rowid < ' . $pageid . ' AND fk_website = ' . $object -> id ;
$resql = $db -> query ( $sql );
if ( $resql )
2018-05-25 17:47:03 +02:00
{
2018-06-11 09:22:50 +02:00
$obj = $db -> fetch_object ( $resql );
if ( $obj )
{
$pagepreviousid = $obj -> pagepreviousid ;
}
2018-05-25 17:47:03 +02:00
}
2018-06-11 09:22:50 +02:00
else dol_print_error ( $db );
$sql = 'SELECT MIN(rowid) as pagenextid FROM ' . MAIN_DB_PREFIX . 'website_page WHERE rowid > ' . $pageid . ' AND fk_website = ' . $object -> id ;
$resql = $db -> query ( $sql );
if ( $resql )
2018-05-25 17:47:03 +02:00
{
2018-06-11 09:22:50 +02:00
$obj = $db -> fetch_object ( $resql );
if ( $obj )
{
$pagenextid = $obj -> pagenextid ;
}
2018-05-25 17:47:03 +02:00
}
2018-06-11 09:22:50 +02:00
else dol_print_error ( $db );
2018-05-25 17:47:03 +02:00
}
2018-05-25 17:59:58 +02:00
2018-07-23 14:08:20 +02:00
if ( $pagepreviousid ) print '<a class="valignmiddle" href="' . $_SERVER [ 'PHP_SELF' ] . '?website=' . urlencode ( $object -> ref ) . '&pageid=' . $pagepreviousid . '&action=' . $action . '">' . img_previous ( $langs -> trans ( " PreviousContainer " )) . '</a>' ;
else print '<span class="valignmiddle opacitymedium">' . img_previous ( $langs -> trans ( " PreviousContainer " )) . '</span>' ;
if ( $pagenextid ) print '<a class="valignmiddle" href="' . $_SERVER [ 'PHP_SELF' ] . '?website=' . urlencode ( $object -> ref ) . '&pageid=' . $pagenextid . '&action=' . $action . '">' . img_next ( $langs -> trans ( " NextContainer " )) . '</a>' ;
else print '<span class="valignmiddle opacitymedium">' . img_next ( $langs -> trans ( " NextContainer " )) . '</span>' ;
2018-05-25 17:47:03 +02:00
2018-02-14 20:33:48 +01:00
$websitepage = new WebSitePage ( $db );
if ( $pageid > 0 && ( $action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' ))
{
$websitepage -> fetch ( $pageid );
}
2019-06-02 17:27:00 +02:00
if ( $action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite' )
2017-10-07 13:09:31 +02:00
{
$disabled = '' ;
2017-10-20 21:39:19 +02:00
if ( empty ( $user -> rights -> website -> write )) $disabled = ' disabled="disabled"' ;
2017-10-07 13:09:31 +02:00
2019-06-02 17:27:00 +02:00
// Confirmation delete site
if ( $action == 'deletesite' ) {
// Create an array for form
$formquestion = array (
array ( 'type' => 'checkbox' , 'name' => 'delete_also_js' , 'label' => $langs -> trans ( " DeleteAlsoJs " ), 'value' => 0 ),
array ( 'type' => 'checkbox' , 'name' => 'delete_also_medias' , 'label' => $langs -> trans ( " DeleteAlsoMedias " ), 'value' => 0 ),
//array('type' => 'other','name' => 'newlang','label' => $langs->trans("Language"), 'value' => $formadmin->select_language(GETPOST('newlang', 'az09')?GETPOST('newlang', 'az09'):$langs->defaultlang, 'newlang', 0, null, '', 0, 0, 'minwidth200')),
//array('type' => 'other','name' => 'newwebsite','label' => $langs->trans("WebSite"), 'value' => $formwebsite->selectWebsite($object->id, 'newwebsite', 0))
);
$formconfirm = $form -> formconfirm ( $_SERVER [ " PHP_SELF " ] . '?id=' . $object -> id , $langs -> trans ( 'DeleteWebsite' ), '' , 'confirm_deletesite' , $formquestion , 0 , 1 , 200 );
print $formconfirm ;
}
2017-10-07 13:09:31 +02:00
// Confirmation to clone
if ( $action == 'createfromclone' ) {
// Create an array for form
$formquestion = array (
2017-11-03 14:38:00 +01:00
array ( 'type' => 'text' , 'name' => 'siteref' , 'label' => $langs -> trans ( " WebSite " ) , 'value' => 'copy_of_' . $object -> ref ),
2017-10-07 13:09:31 +02:00
//array('type' => 'checkbox', 'name' => 'is_a_translation', 'label' => $langs->trans("SiteIsANewTranslation"), 'value' => 0),
//array('type' => 'other','name' => 'newlang','label' => $langs->trans("Language"), 'value' => $formadmin->select_language(GETPOST('newlang', 'az09')?GETPOST('newlang', 'az09'):$langs->defaultlang, 'newlang', 0, null, '', 0, 0, 'minwidth200')),
2017-11-03 14:38:00 +01:00
//array('type' => 'other','name' => 'newwebsite','label' => $langs->trans("WebSite"), 'value' => $formwebsite->selectWebsite($object->id, 'newwebsite', 0))
2017-10-07 13:09:31 +02:00
);
$formconfirm = $form -> formconfirm ( $_SERVER [ " PHP_SELF " ] . '?id=' . $object -> id , $langs -> trans ( 'CloneSite' ), '' , 'confirm_createfromclone' , $formquestion , 0 , 1 , 200 );
print $formconfirm ;
}
2017-07-02 23:38:19 +02:00
2019-06-02 17:27:00 +02:00
if ( $pageid > 0 && $atleastonepage ) // pageid can be set without pages, if homepage of site is set and all pages were removed
2017-10-07 13:09:31 +02:00
{
// Confirmation to clone
if ( $action == 'createpagefromclone' ) {
// Create an array for form
2018-08-24 15:28:53 +02:00
$preselectedlanguage = GETPOST ( 'newlang' , 'az09' ) ? GETPOST ( 'newlang' , 'az09' ) : ( $objectpage -> lang ? $objectpage -> lang : $langs -> defaultlang );
2017-07-22 20:01:29 +02:00
$formquestion = array (
2018-10-14 18:44:29 +02:00
array ( 'type' => 'hidden' , 'name' => 'sourcepageurl' , 'value' => $objectpage -> pageurl ),
2018-08-24 15:16:03 +02:00
array ( 'type' => 'checkbox' , 'tdclass' => 'maxwidth200' , 'name' => 'is_a_translation' , 'label' => $langs -> trans ( " PageIsANewTranslation " ), 'value' => 0 ),
2018-08-24 15:28:53 +02:00
array ( 'type' => 'other' , 'name' => 'newlang' , 'label' => $langs -> trans ( " Language " ), 'value' => $formadmin -> select_language ( $preselectedlanguage , 'newlang' , 0 , null , 1 , 0 , 0 , 'minwidth200' , 0 , 1 )),
2018-08-24 15:12:47 +02:00
array ( 'type' => 'other' , 'name' => 'newwebsite' , 'label' => $langs -> trans ( " WebSite " ), 'value' => $formwebsite -> selectWebsite ( $object -> id , 'newwebsite' , 0 )),
2018-10-14 18:44:29 +02:00
array ( 'type' => 'text' , 'tdclass' => 'maxwidth200 fieldrequired' , 'name' => 'pageurl' , 'label' => $langs -> trans ( " WEBSITE_PAGENAME " ), 'value' => 'copy_of_' . $objectpage -> pageurl ),
2017-07-23 16:20:53 +02:00
);
2017-07-22 20:01:29 +02:00
2017-10-26 14:16:59 +02:00
$formconfirm = $form -> formconfirm ( $_SERVER [ " PHP_SELF " ] . '?website=' . $object -> ref . '&pageid=' . $pageid , $langs -> trans ( 'ClonePage' ), '' , 'confirm_createpagefromclone' , $formquestion , 0 , 1 , 300 , 550 );
2017-07-22 20:01:29 +02:00
print $formconfirm ;
2017-10-07 13:09:31 +02:00
}
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
print ' ' ;
2016-09-14 23:23:22 +02:00
2017-11-15 19:47:07 +01:00
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " EditPageMeta " )) . '" name="editmeta">' ;
2018-07-19 21:35:21 +02:00
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " EditHTMLSource " )) . '" name="editsource">' ;
2018-10-14 14:26:18 +02:00
print '<!-- button EditInLine and ShowSubcontainers -->' . " \n " ;
2018-09-10 09:09:51 +02:00
print '<div class="websiteselectionsection inline-block">' ;
print '<div class="inline-block">' ;
2019-08-14 19:48:52 +02:00
print '<span id="switchckeditorinline">' ;
print ' < script type = " text/javascript " >
$ ( document ) . ready ( function () {
var isEditingEnabled = '.($conf->global->WEBSITE_EDITINLINE?' true ':' false ').' ;
if ( isEditingEnabled )
{
switchEditorOnline ( true );
}
$ ( " #switchckeditorinline " ) . click ( function () {
switchEditorOnline ();
});
function switchEditorOnline ( forceenable )
{
if ( ! isEditingEnabled || forceenable )
{
console . log ( " Enable inline edit " );
jQuery ( \ ' section [ contenteditable = " true " ] \ ' ) . each ( function ( idx ){
var idtouse = $ ( this ) . attr ( \ ' id\ ' );
console . log ( " Enable inline edit for " + idtouse );
CKEDITOR . inline ( idtouse , {
// Allow some non-standard markup that we used in the introduction.
extraAllowedContent : \ ' span ( * ); cite ( * ); q ( * ); dl ( * ); dt ( * ); dd ( * ); ul ( * ); li ( * ); header ( * ); button ( * ); h1 ( * ); h2 ( * ); \ ' ,
removePlugins : \ ' stylescombo\ ' ,
// Show toolbar on startup (optional).
// startupFocus: true
});
})
isEditingEnabled = true ;
}
else {
console . log ( " Disable inline edit " );
for ( name in CKEDITOR . instances )
{
CKEDITOR . instances [ name ] . destroy ( true );
}
isEditingEnabled = false ;
}
};
});
</ script > ' ;
2018-09-28 00:59:02 +02:00
print $langs -> trans ( " EditInLine " );
2019-08-14 19:48:52 +02:00
print '</span>' ;
2018-02-14 20:33:48 +01:00
if ( $websitepage -> grabbed_from )
{
2018-07-19 21:35:21 +02:00
//print '<input type="submit" class="button nobordertransp" disabled="disabled" title="'.dol_escape_htmltag($langs->trans("OnlyEditionOfSourceForGrabbedContent")).'" value="'.dol_escape_htmltag($langs->trans("EditWithEditor")).'" name="editcontent">';
2019-01-27 11:55:16 +01:00
print '<a class="button nobordertransp opacitymedium nohoverborder"' . $disabled . ' href="#" disabled="disabled" title="' . dol_escape_htmltag ( $langs -> trans ( " OnlyEditionOfSourceForGrabbedContent " )) . '">' . img_picto ( $langs -> trans ( " OnlyEditionOfSourceForGrabbedContent " ), 'switch_off' , '' , false , 0 , 0 , '' , 'nomarginleft' ) . '</a>' ;
2018-02-14 20:33:48 +01:00
}
else
{
2018-07-19 21:35:21 +02:00
//print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditWithEditor")).'" name="editcontent">';
if ( empty ( $conf -> global -> WEBSITE_EDITINLINE ))
{
2019-01-27 11:55:16 +01:00
print '<a class="button nobordertransp nohoverborder"' . $disabled . ' href="' . $_SERVER [ " PHP_SELF " ] . '?website=' . $object -> ref . '&pageid=' . $websitepage -> id . '&action=seteditinline">' . img_picto ( $langs -> trans ( " EditInLineOff " ), 'switch_off' , '' , false , 0 , 0 , '' , 'nomarginleft' ) . '</a>' ;
2018-07-19 21:35:21 +02:00
}
else
{
2019-01-27 11:55:16 +01:00
print '<a class="button nobordertransp nohoverborder"' . $disabled . ' href="' . $_SERVER [ " PHP_SELF " ] . '?website=' . $object -> ref . '&pageid=' . $websitepage -> id . '&action=unseteditinline">' . img_picto ( $langs -> trans ( " EditInLineOn " ), 'switch_on' , '' , false , 0 , 0 , '' , 'nomarginleft' ) . '</a>' ;
2018-07-19 21:35:21 +02:00
}
2018-02-14 20:33:48 +01:00
}
2019-08-14 19:48:52 +02:00
2018-09-10 09:09:51 +02:00
print '</div>' ;
print '<div class="inline-block">' ;
print $langs -> trans ( " ShowSubcontainers " );
2018-10-14 14:26:18 +02:00
/* if ( $websitepage -> grabbed_from )
2018-09-10 09:09:51 +02:00
{
2018-09-28 00:59:02 +02:00
print '<a class="button nobordertransp opacitymedium nohoverborder"' . $disabled . ' href="#" disabled="disabled" title="' . dol_escape_htmltag ( $langs -> trans ( " OnlyEditionOfSourceForGrabbedContent " )) . '">' . img_picto ( $langs -> trans ( " OnlyEditionOfSourceForGrabbedContent " ), 'switch_off' , '' , false , 0 , 0 , '' , 'nomarginleft' ) . '</a>' ;
2018-09-10 09:09:51 +02:00
}
else
2018-10-14 14:26:18 +02:00
{ */
2018-09-28 00:59:02 +02:00
if ( empty ( $conf -> global -> WEBSITE_SUBCONTAINERSINLINE ))
{
2019-01-27 11:55:16 +01:00
print '<a class="button nobordertransp nohoverborder"' . $disabled . ' href="' . $_SERVER [ " PHP_SELF " ] . '?website=' . $object -> ref . '&pageid=' . $websitepage -> id . '&action=setshowsubcontainers">' . img_picto ( $langs -> trans ( " ShowSubContainersOff " ), 'switch_off' , '' , false , 0 , 0 , '' , 'nomarginleft' ) . '</a>' ;
2018-09-28 00:59:02 +02:00
}
else
{
2019-01-27 11:55:16 +01:00
print '<a class="button nobordertransp nohoverborder"' . $disabled . ' href="' . $_SERVER [ " PHP_SELF " ] . '?website=' . $object -> ref . '&pageid=' . $websitepage -> id . '&action=unsetshowsubcontainers">' . img_picto ( $langs -> trans ( " ShowSubContainersOn " ), 'switch_on' , '' , false , 0 , 0 , '' , 'nomarginleft' ) . '</a>' ;
2018-09-28 00:59:02 +02:00
}
2018-10-14 14:26:18 +02:00
/*}*/
2018-09-10 09:09:51 +02:00
print '</div>' ;
print '</div>' ;
2018-07-19 21:35:21 +02:00
2019-06-02 17:27:00 +02:00
// @TODO Move this action into a combo list
if ( $object -> fk_default_home > 0 && $pageid == $object -> fk_default_home )
{
//$disabled=' disabled="disabled"';
//print '<span class="button nobordertransp disabled"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'"><span class="fa fa-home"></span></span>';
print '<input type="submit" class="button nobordertransp" disabled="disabled" value="' . dol_escape_htmltag ( $langs -> trans ( " SetAsHomePage " )) . '" name="setashome">' ;
}
else
{
//$disabled='';
//print '<a href="'.$_SERVER["PHP_SEFL"].'?action=setashome&website='.$website->ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'"><span class="fa fa-home"><span></a>';
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " SetAsHomePage " )) . '" name="setashome">' ;
}
2017-11-15 19:47:07 +01:00
print '<input type="submit" class="button nobordertransp"' . $disabled . ' value="' . dol_escape_htmltag ( $langs -> trans ( " ClonePage " )) . '" name="createpagefromclone">' ;
2017-10-07 13:09:31 +02:00
print '<input type="submit" class="buttonDelete" name="delete" value="' . $langs -> trans ( " Delete " ) . '"' . ( $atleastonepage ? '' : ' disabled="disabled"' ) . '>' ;
}
}
2016-09-14 23:23:22 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ; // end website selection
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
print '<div class="websitetools">' ;
2016-04-27 09:41:42 +02:00
2019-06-02 17:27:00 +02:00
if (( $pageid > 0 && $atleastonepage ) && ( $action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite' ))
2017-10-07 13:09:31 +02:00
{
2018-07-22 17:18:35 +02:00
$realpage = $urlwithroot . '/public/website/index.php?website=' . $websitekey . '&pageref=' . $websitepage -> pageurl ;
2017-10-07 13:09:31 +02:00
$pagealias = $websitepage -> pageurl ;
2018-02-19 21:31:03 +01:00
$htmltext = $langs -> trans ( " PreviewSiteServedByDolibarr " , $langs -> transnoentitiesnoconv ( " Page " ), $langs -> transnoentitiesnoconv ( " Page " ), $realpage , $dataroot );
2018-02-19 21:57:30 +01:00
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " ReadPerm " ), DOL_DOCUMENT_ROOT );
2018-10-14 16:10:02 +02:00
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " WritePerm " ), DOL_DATA_ROOT . '/website<br>' . DOL_DATA_ROOT . '/medias' );
2018-02-19 21:31:03 +01:00
2018-07-22 17:18:35 +02:00
print '<a class="websitebuttonsitepreview" id="previewpage" href="' . $realpage . '&nocache=' . dol_now () . '" class="button" target="tab' . $websitekey . '" alt="' . dol_escape_htmltag ( $htmltext ) . '">' ;
2018-02-19 21:31:03 +01:00
print $form -> textwithpicto ( '' , $htmltext , 1 , 'preview' );
2017-10-07 13:09:31 +02:00
print '</a>' ; // View page in new Tab
print '<div class="websiteinputurl" id="websiteinputpage">' ;
print '<input type="text" id="previewpageurl" class="minwidth200imp" name="previewsite" value="' . $pagealias . '" disabled="disabled">' ;
$htmltext = $langs -> trans ( " PageNameAliasHelp " , $langs -> transnoentitiesnoconv ( " EditPageMeta " ));
print $form -> textwithpicto ( '' , $htmltext , 1 , 'help' , '' , 0 , 2 , 'helppagealias' );
print '</div>' ;
$urlext = $virtualurl . '/' . $pagealias . '.php' ;
2018-07-22 17:18:35 +02:00
$urlint = $urlwithroot . '/public/website/index.php?website=' . $websitekey ;
2018-02-19 21:31:03 +01:00
$htmltext = $langs -> trans ( " PreviewSiteServedByWebServer " , $langs -> transnoentitiesnoconv ( " Page " ), $langs -> transnoentitiesnoconv ( " Page " ), $dataroot , $virtualurl ? $urlext : '<span class="error">' . $langs -> trans ( " VirtualHostUrlNotDefined " ) . '</span>' );
2018-07-22 17:18:35 +02:00
print '<a class="websitebuttonsitepreview' . ( $virtualurl ? '' : ' websitebuttonsitepreviewdisabled cursornotallowed' ) . '" id="previewpageext" href="' . $urlext . '" target="tab' . $websitekey . 'ext" alt="' . dol_escape_htmltag ( $htmltext ) . '">' ;
2018-02-19 21:31:03 +01:00
print $form -> textwithpicto ( '' , $htmltext , 1 , 'preview_ext' );
2017-10-07 13:09:31 +02:00
print '</a>' ;
2018-07-22 17:18:35 +02:00
//print '<input type="submit" class="button" name="previewpage" target="tab'.$websitekey.'"value="'.$langs->trans("ViewPageInNewTab").'">';
2017-10-07 13:09:31 +02:00
// TODO Add js to save alias like we save virtual host name and use dynamic virtual host for url of id=previewpageext
}
2019-08-13 00:34:42 +02:00
if ( ! in_array ( $action , array ( 'editcss' , 'editmenu' , 'file_manager' , 'replacesite' , 'replacesiteconfirm' , 'createsite' , 'createcontainer' , 'createfromclone' , 'createpagefromclone' , 'deletesite' )))
2017-10-07 13:09:31 +02:00
{
2019-01-27 11:55:16 +01:00
if ( preg_match ( '/^create/' , $action )) print '<input type="submit" id="savefile" class="button buttonforacesave" value="' . dol_escape_htmltag ( $langs -> trans ( " Save " )) . '" name="update">' ;
if ( preg_match ( '/^edit/' , $action )) print '<input type="submit" id="savefile" class="button buttonforacesave" value="' . dol_escape_htmltag ( $langs -> trans ( " Save " )) . '" name="update">' ;
2017-10-07 13:09:31 +02:00
if ( $action != 'preview' ) print '<input type="submit" class="button" value="' . dol_escape_htmltag ( $langs -> trans ( " Cancel " )) . '" name="preview">' ;
}
2017-07-20 16:49:20 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ; // end websitetools
2017-07-20 16:49:20 +02:00
2017-10-07 13:09:31 +02:00
print '<div class="websitehelp">' ;
if ( GETPOST ( 'editsource' , 'alpha' ) || GETPOST ( 'editcontent' , 'alpha' ))
{
2017-11-15 19:47:07 +01:00
$htmltext = $langs -> transnoentitiesnoconv ( " YouCanEditHtmlSource " ) . '<br>' ;
2019-03-09 18:37:07 +01:00
if ( $conf -> browser -> layout == 'phone' )
{
print $form -> textwithpicto ( '' , $htmltext , 1 , 'help' , 'inline-block' , 1 , 2 , 'tooltipsubstitution' );
}
else
{
2019-08-15 18:46:48 +02:00
//img_help(($tooltiptrigger != '' ? 2 : 1), $alt)
print $form -> textwithpicto ( $langs -> trans ( " SyntaxHelp " ) . ' ' . img_help ( 2 , $langs -> trans ( " SyntaxHelp " )), $htmltext , 1 , 'none' , 'inline-block' , 1 , 2 , 'tooltipsubstitution' );
2019-03-09 18:37:07 +01:00
}
2017-10-07 13:09:31 +02:00
}
print '</div>' ; // end websitehelp
2017-07-20 16:49:20 +02:00
2017-10-07 13:09:31 +02:00
if ( $action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' )
{
// Adding jquery code to change on the fly url of preview ext
if ( ! empty ( $conf -> use_javascript_ajax ))
{
print ' < script type = " text/javascript " language = " javascript " >
2016-09-14 23:23:22 +02:00
jQuery ( document ) . ready ( function () {
2017-07-20 11:51:30 +02:00
jQuery ( " #websiteinputurl " ) . keyup ( function () {
console . log ( " Website external url modified " + jQuery ( " #previewsiteurl " ) . val ());
2018-06-11 10:34:54 +02:00
if ( jQuery ( " #previewsiteurl " ) . val () != " " && jQuery ( " #previewsiteurl " ) . val () . startsWith ( " http " ))
{
jQuery ( " a.websitebuttonsitepreviewdisabled img " ) . css ({ opacity : 1 });
}
2017-07-20 11:51:30 +02:00
else jQuery ( " a.websitebuttonsitepreviewdisabled img " ) . css ({ opacity : 0.2 });
2018-02-15 01:29:51 +01:00
' ;
print '
2017-07-20 11:51:30 +02:00
});
2016-09-14 23:23:22 +02:00
jQuery ( " #previewsiteext,#previewpageext " ) . click ( function () {
2018-06-11 10:34:54 +02:00
2016-09-14 23:23:22 +02:00
newurl = jQuery ( " #previewsiteurl " ) . val ();
2018-06-11 10:34:54 +02:00
if ( ! newurl . startsWith ( " http " ))
{
2019-01-23 15:06:28 +01:00
alert ( \ '' . dol_escape_js ( $langs -> trans ( " ErrorURLMustStartWithHttp " )) . ' \ ' );
2018-06-11 10:38:04 +02:00
return false ;
2018-06-11 10:34:54 +02:00
}
2016-09-14 23:23:22 +02:00
newpage = jQuery ( " #previewsiteurl " ) . val () + " / " + jQuery ( " #previewpageurl " ) . val () + " .php " ;
console . log ( " Open url " + newurl );
/* Save url */
jQuery . ajax ({
method : " POST " ,
url : " '.DOL_URL_ROOT.'/core/ajax/saveinplace.php " ,
data : {
field : \ ' editval_virtualhost\ ' ,
2017-10-20 21:39:19 +02:00
element : \ ' website\ ' ,
2016-09-14 23:23:22 +02:00
table_element : \ ' website\ ' ,
fk_element : '.$object->id.' ,
value : newurl ,
},
context : document . body
});
2017-07-02 23:38:19 +02:00
2016-09-14 23:23:22 +02:00
jQuery ( " #previewsiteext " ) . attr ( " href " , newurl );
jQuery ( " #previewpageext " ) . attr ( " href " , newpage );
});
});
</ script > ' ;
2017-10-07 13:09:31 +02:00
}
}
}
2016-02-02 16:24:12 +01:00
2018-12-17 17:29:04 +01:00
print '</div>' ; // end current websitebar
2017-11-10 15:29:12 +01:00
}
2016-02-02 16:24:12 +01:00
$head = array ();
/*
2017-12-19 16:16:31 +01:00
* Edit Site HTML header and CSS
2016-02-02 16:24:12 +01:00
*/
2016-05-01 16:34:50 +02:00
if ( $action == 'editcss' )
2016-02-02 16:24:12 +01:00
{
2017-10-07 13:09:31 +02:00
print '<div class="fiche">' ;
print '<br>' ;
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'editcss' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' ))
2017-12-19 11:40:29 +01:00
{
$csscontent = @ file_get_contents ( $filecss );
// Clean the php css file to remove php code and get only css part
$csscontent = preg_replace ( '/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims' , '' , $csscontent );
}
else
{
$csscontent = GETPOST ( 'WEBSITE_CSS_INLINE' );
}
2017-12-19 12:54:10 +01:00
if ( ! trim ( $csscontent )) $csscontent = '/* CSS content (all pages) */' . " \n " . " body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; } \n .bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;} " ;
2017-10-07 13:09:31 +02:00
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'editcss' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' ))
2017-12-19 11:40:29 +01:00
{
$jscontent = @ file_get_contents ( $filejs );
// Clean the php js file to remove php code and get only js part
$jscontent = preg_replace ( '/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims' , '' , $jscontent );
}
else
{
$jscontent = GETPOST ( 'WEBSITE_JS_INLINE' );
}
2017-10-07 13:09:31 +02:00
if ( ! trim ( $jscontent )) $jscontent = '/* JS content (all pages) */' . " \n " ;
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'editcss' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' ))
2017-12-19 11:40:29 +01:00
{
2017-12-19 12:54:10 +01:00
$htmlheadercontent = @ file_get_contents ( $filehtmlheader );
2017-12-19 11:40:29 +01:00
// Clean the php htmlheader file to remove php code and get only html part
2017-12-19 12:54:10 +01:00
$htmlheadercontent = preg_replace ( '/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims' , '' , $htmlheadercontent );
2017-12-19 11:40:29 +01:00
}
else
{
2017-12-19 12:54:10 +01:00
$htmlheadercontent = GETPOST ( 'WEBSITE_HTML_HEADER' );
2017-12-19 11:40:29 +01:00
}
2017-12-19 12:54:10 +01:00
if ( ! trim ( $htmlheadercontent ))
{
$htmlheadercontent = " <html> \n " ;
2018-01-02 17:27:05 +01:00
$htmlheadercontent .= $htmlheadercontentdefault ;
2017-12-19 12:54:10 +01:00
$htmlheadercontent .= " </html> " ;
}
2017-12-19 16:16:31 +01:00
else
{
$htmlheadercontent = preg_replace ( '/^\s*<html>/ims' , '' , $htmlheadercontent );
$htmlheadercontent = preg_replace ( '/<\/html>\s*$/ims' , '' , $htmlheadercontent );
$htmlheadercontent = '<html>' . " \n " . trim ( $htmlheadercontent ) . " \n " . '</html>' ;
}
2017-10-07 13:09:31 +02:00
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'editcss' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' ))
2017-12-19 11:40:29 +01:00
{
$robotcontent = @ file_get_contents ( $filerobot );
// Clean the php htmlheader file to remove php code and get only html part
$robotcontent = preg_replace ( '/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims' , '' , $robotcontent );
}
else
{
$robotcontent = GETPOST ( 'WEBSITE_ROBOT' );
}
2017-10-07 13:09:31 +02:00
if ( ! trim ( $robotcontent ))
{
$robotcontent .= " # Robot file. Generated with " . DOL_APPLICATION_TITLE . " \n " ;
$robotcontent .= " User-agent: * \n " ;
$robotcontent .= " Allow: /public/ \n " ;
$robotcontent .= " Disallow: /administrator/ \n " ;
}
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'editcss' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' ))
2017-12-19 11:40:29 +01:00
{
$htaccesscontent = @ file_get_contents ( $filehtaccess );
// Clean the php htaccesscontent file to remove php code and get only html part
$htaccesscontent = preg_replace ( '/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims' , '' , $htaccesscontent );
}
else
{
$htaccesscontent = GETPOST ( 'WEBSITE_HTACCESS' );
}
2017-10-07 13:09:31 +02:00
if ( ! trim ( $htaccesscontent ))
{
$htaccesscontent .= " # Order allow,deny \n " ;
2017-07-23 17:44:26 +02:00
$htaccesscontent .= " # Deny from all \n " ;
2017-10-07 13:09:31 +02:00
}
2019-08-12 17:34:18 +02:00
if ( GETPOST ( 'editcss' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' ))
{
$manifestjsoncontent = @ file_get_contents ( $filemanifestjson );
// Clean the manifestjson file to remove php code and get only html part
$manifestjsoncontent = preg_replace ( '/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims' , '' , $manifestjsoncontent );
}
else
{
$manifestjsoncontent = GETPOST ( 'WEBSITE_MANIFEST_JSON' );
}
if ( ! trim ( $manifestjsoncontent ))
{
//$manifestjsoncontent.="";
}
2017-07-23 17:44:26 +02:00
2019-08-15 00:55:47 +02:00
if ( GETPOST ( 'editcss' , 'alpha' ) || GETPOST ( 'refreshpage' , 'alpha' ))
{
$readmecontent = @ file_get_contents ( $filereadme );
// Clean the readme file to remove php code and get only html part
$readmecontent = preg_replace ( '/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims' , '' , $readmecontent );
}
else
{
$readmecontent = GETPOST ( 'WEBSITE_README' );
}
if ( ! trim ( $readmecontent ))
{
//$readmecontent.="";
}
2017-10-07 13:09:31 +02:00
dol_fiche_head ();
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
print '<!-- Edit CSS -->' . " \n " ;
print '<table class="border" width="100%">' ;
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
// Website
print '<tr><td class="titlefieldcreate">' ;
print $langs -> trans ( 'WebSite' );
print '</td><td>' ;
2018-07-22 17:18:35 +02:00
print $websitekey ;
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2016-04-27 09:41:42 +02:00
2019-08-12 17:34:18 +02:00
// VirtualHost
print '<tr><td class="tdtop">' ;
$htmltext = $langs -> trans ( " SetHereVirtualHost " , DOL_DATA_ROOT . '/website/<i>' . $websitekey . '</i>' );
$htmltext .= '<br>' ;
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " ReadPerm " ), DOL_DOCUMENT_ROOT );
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " WritePerm " ), DOL_DATA_ROOT . '/website<br>' . DOL_DATA_ROOT . '/medias' );
print $form -> textwithpicto ( $langs -> trans ( 'Virtualhost' ), $htmltext , 1 , 'help' , '' , 0 , 2 , 'virtualhosttooltip' );
print '</td><td>' ;
print '<input type="text" class="flat" value="' . ( GETPOSTISSET ( 'virtualhost' ) ? GETPOST ( 'virtualhost' , 'alpha' ) : $virtualurl ) . '" name="virtualhost">' ;
print '</td>' ;
print '</tr>' ;
2017-10-07 13:09:31 +02:00
// CSS file
print '<tr><td class="tdtop">' ;
2019-08-14 23:47:01 +02:00
$htmlhelp = $langs -> trans ( " CSSContentTooltipHelp " );
print $form -> textwithpicto ( $langs -> trans ( 'WEBSITE_CSS_INLINE' ), $htmlhelp , 1 , 'help' , '' , 0 , 2 , 'csstooltip' );
2017-10-07 13:09:31 +02:00
print '</td><td>' ;
2017-07-19 16:38:00 +02:00
2017-10-07 13:09:31 +02:00
$doleditor = new DolEditor ( 'WEBSITE_CSS_INLINE' , $csscontent , '' , '220' , 'ace' , 'In' , true , false , 'ace' , 0 , '100%' , '' );
2017-07-19 16:38:00 +02:00
print $doleditor -> Create ( 1 , '' , true , 'CSS' , 'css' );
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2016-05-01 16:34:50 +02:00
2017-10-07 13:09:31 +02:00
// JS file
print '<tr><td class="tdtop">' ;
print $langs -> trans ( 'WEBSITE_JS_INLINE' );
print '</td><td>' ;
2017-10-07 03:08:01 +02:00
2017-10-07 13:09:31 +02:00
$doleditor = new DolEditor ( 'WEBSITE_JS_INLINE' , $jscontent , '' , '220' , 'ace' , 'In' , true , false , 'ace' , 0 , '100%' , '' );
2017-10-07 03:08:01 +02:00
print $doleditor -> Create ( 1 , '' , true , 'JS' , 'javascript' );
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2017-10-07 03:08:01 +02:00
2017-10-07 13:09:31 +02:00
// Common HTML header
2017-07-19 16:38:00 +02:00
print '<tr><td class="tdtop">' ;
2019-08-14 23:57:44 +02:00
print $langs -> trans ( 'WEBSITE_HTML_HEADER' );
2017-12-17 20:25:45 +01:00
$htmlhelp = $langs -> trans ( " Example " ) . ' :<br>' ;
2018-01-02 17:27:05 +01:00
$htmlhelp .= dol_htmlentitiesbr ( $htmlheadercontentdefault );
2019-08-14 23:57:44 +02:00
$textwithhelp = $form -> textwithpicto ( '' , $htmlhelp , 1 , 'help' , '' , 0 , 2 , 'htmlheadertooltip' );
$htmlhelp2 = $langs -> trans ( " LinkAndScriptsHereAreNotLoadedInEditor " ) . '<br>' ;
print $form -> textwithpicto ( $textwithhelp , $htmlhelp2 , 1 , 'warning' , '' , 0 , 2 , 'htmlheadertooltip2' );
2017-10-07 13:09:31 +02:00
print '</td><td>' ;
2017-07-19 16:38:00 +02:00
2017-12-19 12:54:10 +01:00
$doleditor = new DolEditor ( 'WEBSITE_HTML_HEADER' , $htmlheadercontent , '' , '220' , 'ace' , 'In' , true , false , 'ace' , 0 , '100%' , '' );
2017-07-19 16:38:00 +02:00
print $doleditor -> Create ( 1 , '' , true , 'HTML Header' , 'html' );
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2017-07-23 17:44:26 +02:00
2017-10-07 13:09:31 +02:00
// Robot file
2017-07-23 17:44:26 +02:00
print '<tr><td class="tdtop">' ;
2017-10-07 13:09:31 +02:00
print $langs -> trans ( 'WEBSITE_ROBOT' );
print '</td><td>' ;
2017-07-23 17:44:26 +02:00
2017-10-07 13:09:31 +02:00
$doleditor = new DolEditor ( 'WEBSITE_ROBOT' , $robotcontent , '' , '220' , 'ace' , 'In' , true , false , 'ace' , 0 , '100%' , '' );
2017-12-10 19:54:04 +01:00
print $doleditor -> Create ( 1 , '' , true , 'Robot file' , 'text' );
2017-07-23 17:44:26 +02:00
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2017-07-23 17:44:26 +02:00
2017-10-07 13:09:31 +02:00
// .htaccess
2017-07-23 17:44:26 +02:00
print '<tr><td class="tdtop">' ;
2017-10-07 13:09:31 +02:00
print $langs -> trans ( 'WEBSITE_HTACCESS' );
print '</td><td>' ;
2017-07-23 17:44:26 +02:00
2017-10-07 13:09:31 +02:00
$doleditor = new DolEditor ( 'WEBSITE_HTACCESS' , $htaccesscontent , '' , '220' , 'ace' , 'In' , true , false , 'ace' , 0 , '100%' , '' );
2017-12-10 19:54:04 +01:00
print $doleditor -> Create ( 1 , '' , true , $langs -> trans ( " File " ) . ' .htaccess' , 'text' );
2017-07-23 17:44:26 +02:00
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2017-07-10 23:44:46 +02:00
2019-08-12 17:34:18 +02:00
// Manifest.json
2019-01-23 14:57:43 +01:00
print '<tr><td class="tdtop">' ;
2019-08-12 17:34:18 +02:00
$htmlhelp = $langs -> trans ( " Example " ) . ' :<br>' ;
$htmlhelp .= dol_htmlentitiesbr ( $manifestjsoncontentdefault );
print $form -> textwithpicto ( $langs -> trans ( 'WEBSITE_MANIFEST_JSON' ), $htmlhelp , 1 , 'help' , '' , 0 , 2 , 'manifestjsontooltip' );
print '</td><td>' ;
2019-01-23 14:57:43 +01:00
2019-08-12 17:34:18 +02:00
$doleditor = new DolEditor ( 'WEBSITE_MANIFEST_JSON' , $manifestjsoncontent , '' , '220' , 'ace' , 'In' , true , false , 'ace' , 0 , '100%' , '' );
print $doleditor -> Create ( 1 , '' , true , $langs -> trans ( " File " ) . ' manifest.json' , 'text' );
2019-01-23 14:57:43 +01:00
2019-08-12 17:34:18 +02:00
print '</td></tr>' ;
2019-01-23 14:57:43 +01:00
2019-08-15 00:55:47 +02:00
// README.md
print '<tr><td class="tdtop">' ;
$htmlhelp = $langs -> trans ( " EnterHereLicenseInformation " );
print $form -> textwithpicto ( $langs -> trans ( 'WEBSITE_README' ), $htmlhelp , 1 , 'help' , '' , 0 , 2 , 'readmetooltip' );
print '</td><td>' ;
$doleditor = new DolEditor ( 'WEBSITE_README' , $readmecontent , '' , '220' , 'ace' , 'In' , true , false , 'ace' , 0 , '100%' , '' );
print $doleditor -> Create ( 1 , '' , true , $langs -> trans ( " File " ) . ' README.md' , 'text' );
print '</td></tr>' ;
2017-10-07 13:09:31 +02:00
print '</table>' ;
2016-05-01 16:34:50 +02:00
2017-10-07 13:09:31 +02:00
dol_fiche_end ();
2016-05-01 16:34:50 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ;
2016-05-01 16:34:50 +02:00
2017-10-07 13:09:31 +02:00
print '<br>' ;
2016-05-01 16:34:50 +02:00
}
2018-05-25 17:52:24 +02:00
2017-09-01 12:19:55 +02:00
if ( $action == 'createsite' )
{
2017-10-07 13:09:31 +02:00
print '<div class="fiche">' ;
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '<br>' ;
2017-09-01 12:19:55 +02:00
/* $h = 0 ;
$head = array ();
2017-10-20 21:39:19 +02:00
$head [ $h ][ 0 ] = dol_buildpath ( '/website/index.php' , 1 ) . '?id=' . $object -> id ;
2017-09-01 12:19:55 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " AddSite " );
$head [ $h ][ 2 ] = 'card' ;
$h ++ ;
dol_fiche_head ( $head , 'card' , $langs -> trans ( " AddSite " ), - 1 , 'globe' );
*/
2018-09-09 15:52:55 +02:00
if ( $action == 'createcontainer' ) print load_fiche_titre ( $langs -> trans ( " AddSite " ));
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '<!-- Add site -->' . " \n " ;
//print '<div class="fichecenter">';
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '<table class="border" width="100%">' ;
2017-09-01 12:19:55 +02:00
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'WEBSITE_REF' )) $siteref = GETPOST ( 'WEBSITE_REF' , 'alpha' );
if ( GETPOST ( 'WEBSITE_DESCRIPTION' )) $sitedesc = GETPOST ( 'WEBSITE_DESCRIPTION' , 'alpha' );
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '<tr><td class="titlefieldcreate fieldrequired">' ;
print $langs -> trans ( 'Ref' );
print '</td><td>' ;
print '<input type="text" class="flat maxwidth300" name="WEBSITE_REF" value="' . dol_escape_htmltag ( $siteref ) . '">' ;
print '</td></tr>' ;
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '<tr><td>' ;
print $langs -> trans ( 'Description' );
print '</td><td>' ;
print '<input type="text" class="flat minwidth300" name="WEBSITE_DESCRIPTION" value="' . dol_escape_htmltag ( $sitedesc ) . '">' ;
print '</td></tr>' ;
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '<tr><td>' ;
2019-01-23 14:57:43 +01:00
2018-02-19 21:31:03 +01:00
$htmltext = $langs -> trans ( " SetHereVirtualHost " , DOL_DATA_ROOT . '/website/<i>websiteref</i>' );
2018-02-19 21:57:30 +01:00
$htmltext .= '<br>' ;
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " ReadPerm " ), DOL_DOCUMENT_ROOT );
2018-10-14 16:10:02 +02:00
$htmltext .= '<br>' . $langs -> trans ( " CheckVirtualHostPerms " , $langs -> transnoentitiesnoconv ( " WritePerm " ), DOL_DATA_ROOT . '/website<br>' . DOL_DATA_ROOT . '/medias' );
2018-02-19 21:57:30 +01:00
2019-01-23 14:57:43 +01:00
print $form -> textwithpicto ( $langs -> trans ( 'Virtualhost' ), $htmltext , 1 , 'help' , '' , 0 , 2 , 'virtualhosttooltip' );
2017-10-07 13:09:31 +02:00
print '</td><td>' ;
2019-01-27 11:55:16 +01:00
print '<input type="text" class="flat minwidth300" name="virtualhost" value="' . dol_escape_htmltag ( GETPOST ( 'virtualhost' , 'alpha' )) . '">' ;
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '</table>' ;
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
if ( $action == 'createsite' )
{
print '<div class="center">' ;
2017-09-01 12:19:55 +02:00
2017-12-12 01:40:34 +01:00
print '<input class="button" type="submit" name="addcontainer" value="' . $langs -> trans ( " Create " ) . '">' ;
2017-10-07 13:09:31 +02:00
print '<input class="button" type="submit" name="preview" value="' . $langs -> trans ( " Cancel " ) . '">' ;
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ;
}
2017-09-01 12:19:55 +02:00
//print '</div>';
2017-10-07 13:09:31 +02:00
//dol_fiche_end();
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ;
2017-09-01 12:19:55 +02:00
2017-10-07 13:09:31 +02:00
print '<br>' ;
2017-09-01 12:19:55 +02:00
}
2018-08-15 14:24:33 +02:00
if ( $action == 'importsite' )
{
2018-08-16 00:03:19 +02:00
print '<div class="fiche">' ;
print '<br>' ;
2018-09-09 15:52:55 +02:00
print load_fiche_titre ( $langs -> trans ( " ImportSite " ));
2018-08-16 00:03:19 +02:00
dol_fiche_head ( array (), '0' , '' , - 1 );
2019-08-12 22:19:24 +02:00
print '<span class="opacitymedium">' . $langs -> trans ( " ZipOfWebsitePackageToImport " ) . '</span><br><br>' ;
2018-08-15 14:24:33 +02:00
2018-08-16 00:03:19 +02:00
print '<input class="flat minwidth400" type="file" name="userfile[]" accept=".zip">' ;
print '<input type="submit" class="button" name="buttonsubmitimportfile" value="' . dol_escape_htmltag ( $langs -> trans ( " Upload " )) . '">' ;
2018-11-20 13:41:38 +01:00
print '<input type="submit" class="button" name="preview" value="' . dol_escape_htmltag ( $langs -> trans ( " Cancel " )) . '">' ;
2018-08-15 14:24:33 +02:00
2019-08-12 22:19:24 +02:00
print '<br><br><br>' ;
print '<span class="opacitymedium">' . $langs -> trans ( " ZipOfWebsitePackageToLoad " ) . '</span><br><br>' ;
showWebsiteTemplates ( $website );
2018-08-16 00:03:19 +02:00
dol_fiche_end ();
print '</div>' ;
print '<br>' ;
2018-08-15 14:24:33 +02:00
}
2018-05-25 17:52:24 +02:00
2017-12-12 01:40:34 +01:00
if ( $action == 'editmeta' || $action == 'createcontainer' )
2016-05-01 16:34:50 +02:00
{
2017-10-07 13:09:31 +02:00
print '<div class="fiche">' ;
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
print '<br>' ;
2017-07-02 23:38:19 +02:00
2017-09-01 12:19:55 +02:00
/* $h = 0 ;
2017-08-03 01:45:31 +02:00
$head = array ();
2017-10-20 21:39:19 +02:00
$head [ $h ][ 0 ] = dol_buildpath ( '/website/index.php' , 1 ) . '?id=' . $object -> id ;
2017-08-03 01:45:31 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " AddPage " );
$head [ $h ][ 2 ] = 'card' ;
$h ++ ;
2017-09-01 12:19:55 +02:00
dol_fiche_head ( $head , 'card' , $langs -> trans ( " AddPage " ), - 1 , 'globe' );
*/
2018-09-09 15:52:55 +02:00
if ( $action == 'createcontainer' ) print load_fiche_titre ( $langs -> trans ( " AddPage " ));
2017-07-02 23:38:19 +02:00
2017-12-12 01:40:34 +01:00
print '<!-- Edit or create page/container -->' . " \n " ;
2017-10-07 13:09:31 +02:00
//print '<div class="fichecenter">';
2017-08-03 01:45:31 +02:00
2018-02-19 14:56:37 +01:00
if ( $action == 'createcontainer' )
2017-10-07 13:09:31 +02:00
{
2018-02-19 14:56:37 +01:00
print '<br>' ;
print ' * ' . $langs -> trans ( " CreateByFetchingExternalPage " ) . '<br><hr>' ;
print '<table class="border" width="100%">' ;
print '<tr><td class="titlefield">' ;
print $langs -> trans ( " URL " );
print '</td><td>' ;
2018-09-20 14:36:13 +02:00
print info_admin ( $langs -> trans ( " OnlyEditionOfSourceForGrabbedContentFuture " ), 0 , 0 , 'warning' );
2019-01-27 11:55:16 +01:00
print '<input class="flat minwidth500" type="text" name="externalurl" value="' . dol_escape_htmltag ( GETPOST ( 'externalurl' , 'alpha' )) . '" placeholder="https://externalsite/pagetofetch"> ' ;
2018-11-27 18:04:45 +01:00
print '<br><input class="flat paddingtop" type="checkbox" name="grabimages" value="1" checked="checked"> ' . $langs -> trans ( " GrabImagesInto " );
2018-02-19 14:56:37 +01:00
print ' ' ;
print $langs -> trans ( " ImagesShouldBeSavedInto " ) . ' ' ;
$arraygrabimagesinto = array ( 'root' => $langs -> trans ( " WebsiteRootOfImages " ), 'subpage' => $langs -> trans ( " SubdirOfPage " ));
print $form -> selectarray ( 'grabimagesinto' , $arraygrabimagesinto , GETPOSTISSET ( 'grabimagesinto' ) ? GETPOST ( 'grabimagesinto' ) : 'root' );
print '<br>' ;
print '<input class="button" style="margin-top: 5px" type="submit" name="fetchexternalurl" value="' . dol_escape_htmltag ( $langs -> trans ( " FetchAndCreate " )) . '">' ;
print '</td></tr>' ;
print '</table>' ;
print '<br>' ;
print ' * ' . $langs -> trans ( " OrEnterPageInfoManually " ) . '<br><hr>' ;
2017-10-07 13:09:31 +02:00
}
2017-10-01 21:29:49 +02:00
2017-10-07 13:09:31 +02:00
print '<table class="border" width="100%">' ;
2017-08-20 19:47:55 +02:00
2017-12-12 01:40:34 +01:00
if ( $action != 'createcontainer' )
2017-10-07 13:09:31 +02:00
{
2018-02-28 14:36:22 +01:00
print '<tr><td class="titlefield">' ;
2017-10-07 13:09:31 +02:00
print $langs -> trans ( 'IDOfPage' );
print '</td><td>' ;
print $pageid ;
print '</td></tr>' ;
print '<tr><td class="titlefield">' ;
2018-09-20 14:36:13 +02:00
print $langs -> trans ( 'InternalURLOfPage' );
2017-10-07 13:09:31 +02:00
print '</td><td>' ;
2018-07-22 17:18:35 +02:00
print '/public/website/index.php?website=' . urlencode ( $websitekey ) . '&pageid=' . urlencode ( $pageid );
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
/*
2017-08-20 19:47:55 +02:00
print '<tr><td class="titlefield">' ;
print $langs -> trans ( 'InitiallyGrabbedFrom' );
print '</td><td>' ;
print $objectpage -> grabbed_from ;
print '</td></tr>' ;
*/
2017-12-02 13:24:21 +01:00
$type_container = $objectpage -> type_container ;
2017-10-07 13:09:31 +02:00
$pageurl = $objectpage -> pageurl ;
2018-02-28 14:36:22 +01:00
$pagealiasalt = $objectpage -> aliasalt ;
2017-10-07 13:09:31 +02:00
$pagetitle = $objectpage -> title ;
$pagedescription = $objectpage -> description ;
2018-11-20 18:29:29 +01:00
$pageimage = $objectpage -> image ;
2017-10-07 13:09:31 +02:00
$pagekeywords = $objectpage -> keywords ;
$pagelang = $objectpage -> lang ;
$pagehtmlheader = $objectpage -> htmlheader ;
2018-09-24 17:12:51 +02:00
$pagedatecreation = $objectpage -> date_creation ;
$pagedatemodification = $objectpage -> date_modification ;
2019-01-15 10:53:28 +01:00
$pageauthorid = $objectpage -> fk_user_creat ;
$pageusermodifid = $objectpage -> fk_user_modif ;
2017-10-07 13:09:31 +02:00
}
2018-06-06 23:12:09 +02:00
else
{
$type_container = 'page' ;
2018-09-24 17:12:51 +02:00
$pagedatecreation = dol_now ();
$pageauthorid = $user -> id ;
2019-01-15 11:14:01 +01:00
$pageusermodifid = 0 ;
2018-06-06 23:12:09 +02:00
}
2019-01-27 11:55:16 +01:00
if ( GETPOST ( 'WEBSITE_TITLE' , 'alpha' )) $pagetitle = GETPOST ( 'WEBSITE_TITLE' , 'alpha' );
if ( GETPOST ( 'WEBSITE_PAGENAME' , 'alpha' )) $pageurl = GETPOST ( 'WEBSITE_PAGENAME' , 'alpha' );
if ( GETPOST ( 'WEBSITE_ALIASALT' , 'alpha' )) $pagealiasalt = GETPOST ( 'WEBSITE_ALIASALT' , 'alpha' );
if ( GETPOST ( 'WEBSITE_DESCRIPTION' , 'alpha' )) $pagedescription = GETPOST ( 'WEBSITE_DESCRIPTION' , 'alpha' );
if ( GETPOST ( 'WEBSITE_IMAGE' , 'alpha' )) $pageimage = GETPOST ( 'WEBSITE_IMAGE' , 'alpha' );
if ( GETPOST ( 'WEBSITE_KEYWORDS' , 'alpha' )) $pagekeywords = GETPOST ( 'WEBSITE_KEYWORDS' , 'alpha' );
if ( GETPOST ( 'WEBSITE_LANG' , 'aZ09' )) $pagelang = GETPOST ( 'WEBSITE_LANG' , 'aZ09' );
if ( GETPOST ( 'htmlheader' , 'none' )) $pagehtmlheader = GETPOST ( 'htmlheader' , 'none' );
2016-04-27 09:41:42 +02:00
2018-05-15 11:36:39 +02:00
// Title
print '<tr><td class="fieldrequired">' ;
print $langs -> trans ( 'WEBSITE_TITLE' );
print '</td><td>' ;
2018-06-07 19:12:18 +02:00
print '<input type="text" class="flat quatrevingtpercent" name="WEBSITE_TITLE" id="WEBSITE_TITLE" value="' . dol_escape_htmltag ( $pagetitle ) . '">' ;
2018-05-15 11:36:39 +02:00
print '</td></tr>' ;
// Alias
2018-02-28 14:36:22 +01:00
print '<tr><td class="titlefieldcreate fieldrequired">' ;
print $langs -> trans ( 'WEBSITE_PAGENAME' );
2017-12-02 13:24:21 +01:00
print '</td><td>' ;
2018-06-07 19:12:18 +02:00
print '<input type="text" class="flat minwidth300" name="WEBSITE_PAGENAME" id="WEBSITE_PAGENAME" value="' . dol_escape_htmltag ( $pageurl ) . '">' ;
2017-12-02 13:24:21 +01:00
print '</td></tr>' ;
2018-09-20 14:36:13 +02:00
// Type of container
2018-02-20 18:10:11 +01:00
print '<tr><td class="titlefield fieldrequired">' ;
2018-02-28 14:36:22 +01:00
print $langs -> trans ( 'WEBSITE_TYPE_CONTAINER' );
2018-02-20 18:10:11 +01:00
print '</td><td>' ;
2019-01-27 11:55:16 +01:00
print $formwebsite -> selectTypeOfContainer ( 'WEBSITE_TYPE_CONTAINER' , ( GETPOST ( 'WEBSITE_TYPE_CONTAINER' , 'alpha' ) ? GETPOST ( 'WEBSITE_TYPE_CONTAINER' , 'alpha' ) : $type_container ));
2018-02-20 18:10:11 +01:00
print '</td></tr>' ;
2018-02-28 14:36:22 +01:00
if ( $action == 'createcontainer' )
{
print '<tr><td class="titlefield fieldrequired">' ;
print $langs -> trans ( 'WEBSITE_PAGE_EXAMPLE' );
print '</td><td>' ;
2019-08-15 18:07:36 +02:00
print $formwebsite -> selectSampleOfContainer ( 'sample' , ( GETPOSTISSET ( 'sample' ) ? GETPOST ( 'sample' , 'alpha' ) : 'empty' ));
2018-02-28 14:36:22 +01:00
print '</td></tr>' ;
}
2017-10-07 13:09:31 +02:00
print '<tr><td>' ;
print $langs -> trans ( 'WEBSITE_DESCRIPTION' );
print '</td><td>' ;
print '<input type="text" class="flat quatrevingtpercent" name="WEBSITE_DESCRIPTION" value="' . dol_escape_htmltag ( $pagedescription ) . '">' ;
print '</td></tr>' ;
2018-11-20 16:48:34 +01:00
print '<tr><td>' ;
$htmlhelp = $langs -> trans ( " WEBSITE_IMAGEDesc " );
2018-12-18 11:03:23 +01:00
print $form -> textwithpicto ( $langs -> trans ( 'WEBSITE_IMAGE' ), $htmlhelp , 1 , 'help' , '' , 0 , 2 , 'imagetooltip' );
2018-11-20 16:48:34 +01:00
print '</td><td>' ;
print '<input type="text" class="flat quatrevingtpercent" name="WEBSITE_IMAGE" value="' . dol_escape_htmltag ( $pageimage ) . '">' ;
print '</td></tr>' ;
2017-10-07 13:09:31 +02:00
print '<tr><td>' ;
print $langs -> trans ( 'WEBSITE_KEYWORDS' );
print '</td><td>' ;
print '<input type="text" class="flat quatrevingtpercent" name="WEBSITE_KEYWORDS" value="' . dol_escape_htmltag ( $pagekeywords ) . '">' ;
print '</td></tr>' ;
print '<tr><td>' ;
print $langs -> trans ( 'Language' );
print '</td><td>' ;
2017-10-26 14:49:30 +02:00
print $formadmin -> select_language ( $pagelang ? $pagelang : $langs -> defaultlang , 'WEBSITE_LANG' , 0 , null , '1' );
2017-10-07 13:09:31 +02:00
print '</td></tr>' ;
2018-10-14 18:44:29 +02:00
if ( $action != 'createcontainer' )
{
// Translation of
if ( $objectpage -> fk_page > 0 )
{
print '<tr><td>' ;
print $langs -> trans ( 'ThisPageIsTranslationOf' );
print '</td><td>' ;
$sourcepage = new WebsitePage ( $db );
$result = $sourcepage -> fetch ( $objectpage -> fk_page );
if ( $result == 0 ) // not found, we can reset value
{
}
elseif ( $result > 0 )
{
print $sourcepage -> getNomUrl ( 1 );
}
print '</td></tr>' ;
}
// Has translation pages
$sql = 'SELECT rowid, lang from ' . MAIN_DB_PREFIX . 'website_page where fk_page = ' . $objectpage -> id ;
$resql = $db -> query ( $sql );
if ( $resql )
{
$num_rows = $db -> num_rows ( $resql );
if ( $num_rows > 0 )
{
print '<tr><td>' ;
print $langs -> trans ( 'ThisPageHasTranslationPages' );
print '</td><td>' ;
$i = 0 ;
while ( $obj = $db -> fetch_object ( $resql ))
{
$tmppage = new WebsitePage ( $db );
$tmppage -> fetch ( $obj -> rowid );
if ( $i > 0 ) print ' - ' ;
print $tmppage -> getNomUrl ( 1 ) . ' (' . $tmppage -> lang . ')' ;
$i ++ ;
}
print '</td></tr>' ;
}
}
else dol_print_error ( $db );
}
2018-02-28 14:36:22 +01:00
print '<tr><td class="titlefieldcreate">' ;
2018-06-14 16:38:20 +02:00
$htmlhelp = $langs -> trans ( " WEBSITE_ALIASALTDesc " );
2018-12-18 11:03:23 +01:00
print $form -> textwithpicto ( $langs -> trans ( 'WEBSITE_ALIASALT' ), $htmlhelp , 1 , 'help' , '' , 0 , 2 , 'aliastooltip' );
2018-02-28 14:36:22 +01:00
print '</td><td>' ;
print '<input type="text" class="flat minwidth300" name="WEBSITE_ALIASALT" value="' . dol_escape_htmltag ( $pagealiasalt ) . '">' ;
print '</td></tr>' ;
2018-09-24 17:12:51 +02:00
$fuser = new User ( $db );
print '<tr><td>' ;
print $langs -> trans ( 'Author' );
print '</td><td>' ;
2019-01-15 10:53:28 +01:00
if ( $pageauthorid > 0 )
{
$fuser -> fetch ( $pageauthorid );
print $fuser -> getNomUrl ( 1 );
}
2018-09-24 17:12:51 +02:00
print '</td></tr>' ;
print '<tr><td>' ;
print $langs -> trans ( 'DateCreation' );
print '</td><td>' ;
2019-01-15 10:53:28 +01:00
print $form -> select_date ( $pagedatecreation , 'datecreation' , 1 , 1 , 0 , '' , 1 , 1 );
//print dol_print_date($pagedatecreation, 'dayhour');
2018-09-24 17:12:51 +02:00
print '</td></tr>' ;
if ( $action != 'createcontainer' )
{
2019-01-15 10:53:28 +01:00
print '<tr><td>' ;
2019-08-12 19:01:23 +02:00
print $langs -> trans ( 'UserModif' );
2019-01-15 10:53:28 +01:00
print '</td><td>' ;
if ( $pageusermodifid > 0 )
{
$fuser -> fetch ( $pageusermodifid );
print $fuser -> getNomUrl ( 1 );
}
print '</td></tr>' ;
print '<tr><td>' ;
2018-09-24 17:12:51 +02:00
print $langs -> trans ( 'DateModification' );
print '</td><td>' ;
2019-01-15 11:14:01 +01:00
print dol_print_date ( $pagedatemodification , 'dayhour' , 'tzuser' );
2018-09-24 17:12:51 +02:00
print '</td></tr>' ;
}
2017-12-10 19:03:18 +01:00
print '<tr><td class="tdhtmlheader tdtop">' ;
2018-12-18 11:03:23 +01:00
$htmlhelp = $langs -> trans ( " EditTheWebSiteForACommonHeader " ) . '<br><br>' ;
$htmlhelp .= $langs -> trans ( " Example " ) . ' :<br>' ;
2018-01-02 17:27:05 +01:00
$htmlhelp .= dol_htmlentitiesbr ( $htmlheadercontentdefault );
2017-12-19 11:40:29 +01:00
print $form -> textwithpicto ( $langs -> trans ( 'HtmlHeaderPage' ), $htmlhelp , 1 , 'help' , '' , 0 , 2 , 'htmlheadertooltip' );
2017-10-07 13:09:31 +02:00
print '</td><td>' ;
2018-09-24 15:38:13 +02:00
$doleditor = new DolEditor ( 'htmlheader' , $pagehtmlheader , '' , '120' , 'ace' , 'In' , true , false , 'ace' , ROWS_3 , '100%' , '' );
2017-10-07 13:09:31 +02:00
print $doleditor -> Create ( 1 , '' , true , 'HTML Header' , 'html' );
print '</td></tr>' ;
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
print '</table>' ;
2017-12-12 01:40:34 +01:00
if ( $action == 'createcontainer' )
2017-10-07 13:09:31 +02:00
{
print '<div class="center">' ;
2017-08-20 18:50:51 +02:00
2017-12-12 01:40:34 +01:00
print '<input class="button" type="submit" name="addcontainer" value="' . $langs -> trans ( " Create " ) . '">' ;
2017-10-07 13:09:31 +02:00
print '<input class="button" type="submit" name="preview" value="' . $langs -> trans ( " Cancel " ) . '">' ;
2017-08-20 18:50:51 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ;
}
2017-08-20 18:50:51 +02:00
2018-06-07 19:12:18 +02:00
if ( $action == 'createcontainer' )
{
print ' < script type = " text/javascript " language = " javascript " >
jQuery ( document ) . ready ( function () {
var disableautofillofalias = 0 ;
jQuery ( " #WEBSITE_TITLE " ) . keyup ( function () {
if ( disableautofillofalias == 0 )
{
2019-08-15 16:58:36 +02:00
var valnospecial = jQuery ( " #WEBSITE_TITLE " ) . val ();
valnospecial = valnospecial . replace ( / [ éèê ] / g , \ ' e\ ' ) . replace ( / [ à ] / g , \ ' a\ ' ) . replace ( / [ ù ] / g , \ ' u\ ' ) . replace ( / [ î ] / g , \ ' i\ ' );
valnospecial = valnospecial . replace ( / [ ç ] / g , \ ' c\ ' ) . replace ( / [ ö ] / g , \ ' o\ ' );
valnospecial = valnospecial . replace ( / [ ^ \w ] / gi , \ ' - \ ' ) . toLowerCase ();
2018-06-07 19:12:18 +02:00
valnospecial = valnospecial . replace ( / \ -+/ g , \ ' - \ ' ) . replace ( / \ - $ / , \ ' \ ' );
console . log ( " disableautofillofalias=0 so we replace WEBSITE_TITLE with " + valnospecial );
jQuery ( " #WEBSITE_PAGENAME " ) . val ( valnospecial );
}
});
jQuery ( " #WEBSITE_PAGENAME " ) . keyup ( function () {
disableautofillofalias = 1 ;
});
});
</ script > ' ;
}
2017-08-03 01:45:31 +02:00
//print '</div>';
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
//dol_fiche_end();
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
print '</div>' ;
2016-04-27 09:41:42 +02:00
2017-10-07 13:09:31 +02:00
print '<br>' ;
2016-04-19 11:02:55 +02:00
}
2017-11-18 15:41:30 +01:00
if ( $action == 'editfile' || $action == 'file_manager' )
2016-05-01 16:34:50 +02:00
{
2017-10-07 13:09:31 +02:00
print '<!-- Edit Media -->' . " \n " ;
2019-05-28 16:10:11 +02:00
print '<div class="fiche"><br>' ;
2017-11-05 02:04:05 +01:00
//print '<div class="center">'.$langs->trans("FeatureNotYetAvailable").'</center>';
$module = 'medias' ;
2017-11-18 22:19:15 +01:00
if ( empty ( $url )) $url = DOL_URL_ROOT . '/website/index.php' ; // Must be an url without param
2017-11-19 12:22:01 +01:00
include DOL_DOCUMENT_ROOT . '/core/tpl/filemanager.tpl.php' ;
2017-11-18 13:09:12 +01:00
print '</div>' ;
2016-05-01 16:34:50 +02:00
}
2016-04-19 11:02:55 +02:00
if ( $action == 'editmenu' )
{
2017-10-07 13:09:31 +02:00
print '<!-- Edit Menu -->' . " \n " ;
print '<div class="center">' . $langs -> trans ( " FeatureNotYetAvailable " ) . '</center>' ;
2016-04-19 11:02:55 +02:00
}
2017-07-22 20:19:10 +02:00
if ( $action == 'editsource' )
{
2018-09-24 15:14:32 +02:00
// Editing with source editor
2017-07-22 20:19:10 +02:00
$contentforedit = '' ;
2018-09-24 15:14:32 +02:00
//$contentforedit.='<style scoped>'."\n"; // "scoped" means "apply to parent element only". Not yet supported by browsers
//$contentforedit.=$csscontent;
//$contentforedit.='</style>'."\n";
2017-07-22 20:19:10 +02:00
$contentforedit .= $objectpage -> content ;
2018-09-24 15:14:32 +02:00
//var_dump($_SESSION["dol_screenheight"]);
$maxheightwin = 480 ;
if ( isset ( $_SESSION [ " dol_screenheight " ]))
{
if ( $_SESSION [ " dol_screenheight " ] > 680 ) $maxheightwin = $_SESSION [ " dol_screenheight " ] - 400 ;
if ( $_SESSION [ " dol_screenheight " ] > 800 ) $maxheightwin = $_SESSION [ " dol_screenheight " ] - 490 ;
}
//var_dump($_SESSION["dol_screenheight"]);
2017-07-22 20:19:10 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php' ;
2019-01-27 11:55:16 +01:00
$doleditor = new DolEditor ( 'PAGE_CONTENT' , $contentforedit , '' , $maxheightwin , 'Full' , '' , true , true , 'ace' , ROWS_5 , '40%' );
2017-07-22 20:46:02 +02:00
$doleditor -> Create ( 0 , '' , false , 'HTML Source' , 'php' );
2017-07-22 20:19:10 +02:00
}
2018-09-24 15:14:32 +02:00
/* if ( $action == 'editcontent' )
2016-04-19 11:02:55 +02:00
{
2018-09-24 15:14:32 +02:00
// Editing with default ckeditor
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
$contentforedit = '' ;
2018-09-24 15:14:32 +02:00
//$contentforedit.='<style scoped>'."\n"; // "scoped" means "apply to parent element only". Not yet supported by browsers
//$contentforedit.=$csscontent;
//$contentforedit.='</style>'."\n";
2017-10-07 13:09:31 +02:00
$contentforedit .= $objectpage -> content ;
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
$contentforedit = preg_replace ( '/(<img.*src=")(?!http)/' , '\1' . DOL_URL_ROOT . '/viewimage.php?modulepart=medias&file=' , $contentforedit , - 1 , $nbrep );
2017-08-21 03:13:44 +02:00
2017-10-07 13:09:31 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php' ;
$doleditor = new DolEditor ( 'PAGE_CONTENT' , $contentforedit , '' , 500 , 'Full' , '' , true , true , true , ROWS_5 , '90%' );
$doleditor -> Create ( 0 , '' , false );
2018-09-24 15:14:32 +02:00
} */
2016-02-02 16:24:12 +01:00
2018-12-17 17:29:04 +01:00
print " </div> \n " ;
print " </form> \n " ;
2016-04-19 11:02:55 +02:00
2016-02-02 16:24:12 +01:00
2019-08-13 00:34:42 +02:00
if ( $action == 'replacesite' || $action == 'replacesiteconfirm' )
{
print '<form action="' . $_SERVER [ " PHP_SELF " ] . '" method="POST">' ;
print '<input type="hidden" name="token" value="' . $_SESSION [ 'newtoken' ] . '">' ;
print '<input type="hidden" name="action" value="replacesiteconfirm">' ;
2019-08-13 18:22:18 +02:00
print '<input type="hidden" name="website" value="' . $website -> ref . '">' ;
2019-08-13 00:34:42 +02:00
2019-08-13 18:22:18 +02:00
print '<!-- Replace string -->' . " \n " ;
2019-08-13 00:34:42 +02:00
print '<div class="fiche"><br>' ;
print load_fiche_titre ( $langs -> trans ( " ReplaceWebsiteContent " ));
print '<div class="tagtable">' ;
print '<div class="tagtr">' ;
print '<div class="tagtd paddingrightonly">' ;
print $langs -> trans ( " SearchReplaceInto " );
print '</div>' ;
print '<div class="tagtd">' ;
print '<input type="checkbox" name="optioncontent" value="content"' . (( ! GETPOSTISSET ( 'buttonreplacesitesearch' ) || GETPOST ( 'optioncontent' , 'aZ09' )) ? ' checked' : '' ) . '> ' . $langs -> trans ( " Content " );
print '<input type="checkbox" class="marginleftonly" name="optionmeta" value="meta"' . ( GETPOST ( 'optionmeta' , 'aZ09' ) ? ' checked' : '' ) . '> ' . $langs -> trans ( " Title " ) . ' | ' . $langs -> trans ( " Description " ) . ' | ' . $langs -> trans ( " Keywords " );
print '</div>' ;
print '</div>' ;
print '<div class="tagtr">' ;
print '<div class="tagtd paddingrightonly">' ;
print $langs -> trans ( " SearchString " );
print '</div>' ;
print '<div class="tagtd">' ;
print '<input type="text" name="searchstring" value="' . dol_escape_htmltag ( GETPOST ( 'searchstring' , 'none' )) . '">' ;
print '</div>' ;
print '</div>' ;
print '</div>' ;
print '<br>' ;
print '<input type="submit" class="button" name="buttonreplacesitesearch" value="' . $langs -> trans ( " Search " ) . '">' ;
if ( $action == 'replacesiteconfirm' )
{
$algo = '' ;
if ( GETPOST ( 'optionmeta' )) $algo .= 'meta' ;
if ( GETPOST ( 'optioncontent' )) $algo .= 'content' ;
$listofpages = getPagesFromSearchCriterias ( '' , $algo , GETPOST ( 'searchstring' , 'none' ), 1000 );
print '<br>' ;
print '<br>' ;
if ( $listofpages [ 'code' ] == 'OK' )
{
foreach ( $listofpages [ 'list' ] as $websitepagefound )
{
print '<div class="rowsearchresult"><a href="' . $_SERVER [ " PHP_SELF " ] . '?website=' . $website -> ref . '&pageid=' . $websitepagefound -> id . '">' . $websitepagefound -> title . '</a> - ' . $websitepagefound -> description . '</div>' ;
}
}
else
{
print $listofpages [ 'message' ];
}
}
if ( $action == 'replacesiteconfirm' )
{
print '<div class="tagtr">' ;
print '<div class="tagtd paddingrightonly">' ;
print $langs -> trans ( " ReplaceString " );
print '</div>' ;
print '<div class="tagtd">' ;
print '<input type="text" name="replacestring" value="' . dol_escape_htmltag ( GETPOST ( 'replacestring' , 'none' )) . '">' ;
print '<input type="submit" disabled class="button" name="buttonreplacesitesearch" value="' . $langs -> trans ( " Replace " ) . '">' ;
print '</div>' ;
print '</div>' ;
}
print '</form>' ;
}
2017-08-03 01:45:31 +02:00
if ( $action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' )
2016-04-19 11:02:55 +02:00
{
2018-12-17 19:37:17 +01:00
if ( $pageid > 0 && $atleastonepage )
2017-10-07 13:09:31 +02:00
{
2018-07-24 01:10:38 +02:00
// $filejs
// $filecss
// $filephp
2017-10-07 13:09:31 +02:00
// Ouput page under the Dolibarr top menu
$objectpage -> fetch ( $pageid );
2019-08-14 01:43:06 +02:00
2017-10-07 13:09:31 +02:00
$jscontent = @ file_get_contents ( $filejs );
2016-04-27 09:41:42 +02:00
2018-11-27 16:20:31 +01:00
$out = '<!-- Page content ' . $filetpl . ' : Div with (Htmlheader/Style of page from database + CSS Of website from file + Page content from database or by include if WEBSITE_SUBCONTAINERSINLINE is on) -->' . " \n " ;
2017-07-02 23:38:19 +02:00
2018-07-19 16:06:06 +02:00
// Include a html so we can benefit of the header of page.
// Note: We can't use iframe as it can be used to include another external html file
// Note: We can't use frame as it is deprecated.
2018-09-24 15:14:32 +02:00
/* if ( $includepageintoaframeoradiv == 'iframe' )
{
$out .= " <iframe><body></html> " ;
} */
2018-07-19 16:06:06 +02:00
$out .= " \n <html><head> \n " ;
2018-11-27 16:20:31 +01:00
$out .= " <!-- htmlheader/style of page from database --> \n " ;
2019-08-13 06:52:07 +02:00
$out .= dolWebsiteReplacementOfLinks ( $object , $objectpage -> htmlheader , 1 , 'htmlheader' );
2019-08-14 01:43:06 +02:00
$out .= " <!-- htmlheader/style of website from files --> \n " ;
// TODO Keep only the <link> or the <script> tags
/*
$htmlheadercontent = @ file_get_contents ( $filehtmlheader );
$dom = new DOMDocument ;
@ $dom -> loadHTML ( $htmlheadercontent );
$styles = $dom -> getElementsByTagName ( 'link' );
$scripts = $dom -> getElementsByTagName ( 'script' );
foreach ( $styles as $stylescursor )
{
$out .= $stylescursor ;
}
foreach ( $scripts as $scriptscursor )
{
$out .= $scriptscursor ;
}
*/
2018-07-19 16:06:06 +02:00
$out .= " </head> \n " ;
$out .= " \n <body> " ;
2018-09-24 15:14:32 +02:00
2018-11-08 12:12:08 +01:00
$out .= '<div id="websitecontentundertopmenu" class="websitecontentundertopmenu boostrap-iso">' . " \n " ;
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
// REPLACEMENT OF LINKS When page called by website editor
2017-07-02 23:38:19 +02:00
2018-11-27 16:20:31 +01:00
$out .= '<!-- style of website from file -->' . " \n " ;
2017-12-17 16:24:47 +01:00
$out .= '<style scoped>' . " \n " ; // "scoped" means "apply to parent element only". No more supported by browsers, snif !
$tmpout = '' ;
$tmpout .= '/* Include website CSS file */' . " \n " ;
2018-07-23 14:08:20 +02:00
//$csscontent = @file_get_contents($filecss);
ob_start ();
include $filecss ;
$csscontent = ob_get_contents ();
ob_end_clean ();
2019-08-13 06:52:07 +02:00
$tmpout .= dolWebsiteReplacementOfLinks ( $object , $csscontent , 1 , 'css' );
2017-12-17 16:24:47 +01:00
$tmpout .= '/* Include style from the HTML header of page */' . " \n " ;
// Clean the html header of page to get only <style> content
$tmp = preg_split ( '(<style[^>]*>|</style>)' , $objectpage -> htmlheader );
$tmpstyleinheader = '' ;
$i = 0 ;
foreach ( $tmp as $valtmp )
{
$i ++ ;
if ( $i % 2 == 0 ) $tmpstyleinheader .= $valtmp . " \n " ;
}
$tmpout .= $tmpstyleinheader . " \n " ;
// Clean style that may affect global style of Dolibarr
2019-01-27 11:55:16 +01:00
$tmpout = preg_replace ( '/}[\s\n]*body\s*{[^}]+}/ims' , '}' , $tmpout );
2017-12-17 16:24:47 +01:00
$out .= $tmpout ;
2017-10-07 13:09:31 +02:00
$out .= '</style>' . " \n " ;
2017-07-02 23:38:19 +02:00
2018-07-19 21:35:21 +02:00
// Note: <div> or <section> with contenteditable="true" inside this can be edited with inline ckeditor
2017-12-12 03:10:54 +01:00
// Do not enable the contenteditable when page was grabbed, ckeditor is removing span and adding borders,
2018-07-19 16:06:06 +02:00
// so editable will be available only from container created from scratch
2018-09-25 16:35:59 +02:00
//$out.='<div id="bodywebsite" class="bodywebsite"'.($objectpage->grabbed_from ? ' contenteditable="true"' : '').'>'."\n";
2018-09-25 15:00:37 +02:00
$out .= '<div id="divbodywebsite" class="bodywebsite">' . " \n " ;
2017-07-21 02:30:02 +02:00
2018-07-19 21:35:21 +02:00
$newcontent = $objectpage -> content ;
2018-09-24 15:14:32 +02:00
// If mode WEBSITE_SUBCONTAINERSINLINE is on
if ( ! empty ( $conf -> global -> WEBSITE_SUBCONTAINERSINLINE ))
{
//var_dump($filetpl);
$filephp = $filetpl ;
ob_start ();
include $filephp ;
$newcontent = ob_get_contents ();
ob_end_clean ();
}
// Change the contenteditable to "true" or "false" when mode Edit Inline is on or off
2018-07-20 15:01:50 +02:00
if ( empty ( $conf -> global -> WEBSITE_EDITINLINE ))
2018-07-19 21:35:21 +02:00
{
2019-04-12 17:44:22 +02:00
// Remove the contenteditable="true"
2018-07-20 15:01:50 +02:00
$newcontent = preg_replace ( '/(div|section)(\s[^\>]*)contenteditable="true"/' , '\1\2' , $newcontent );
2018-07-19 21:35:21 +02:00
}
else
{
2019-04-12 17:44:22 +02:00
// Keep the contenteditable="true" when mode Edit Inline is on
2018-07-19 21:35:21 +02:00
}
2019-08-14 23:27:34 +02:00
$out .= dolWebsiteReplacementOfLinks ( $object , $newcontent , 0 , 'html' , $objectpage -> id ) . " \n " ;
2018-11-27 16:20:31 +01:00
//$out.=$newcontent;
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
$out .= '</div>' ;
2017-07-28 17:17:40 +02:00
2017-12-17 16:24:47 +01:00
$out .= '</div> <!-- End div id=websitecontentundertopmenu -->' ;
2017-07-02 23:38:19 +02:00
2018-07-19 16:06:06 +02:00
/* if ( $includepageintoaframeoradiv == 'iframe' )
{
$out .= " </body></html></iframe> " ;
} */
$out .= " \n </body></html> \n " ;
2017-10-07 13:09:31 +02:00
$out .= " \n " . '<!-- End page content ' . $filetpl . ' -->' . " \n \n " ;
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
print $out ;
2017-07-02 23:38:19 +02:00
2017-10-07 13:09:31 +02:00
/* file_put_contents ( $filetpl , $out );
2016-05-01 16:34:50 +02:00
if ( ! empty ( $conf -> global -> MAIN_UMASK ))
@ chmod ( $filetpl , octdec ( $conf -> global -> MAIN_UMASK ));
// Output file on browser
dol_syslog ( " index.php include $filetpl $filename content-type= $type " );
$original_file_osencoded = dol_osencode ( $filetpl ); // New file name encoded in OS encoding charset
2017-07-02 23:38:19 +02:00
2016-05-01 16:34:50 +02:00
// This test if file exists should be useless. We keep it to find bug more easily
if ( ! file_exists ( $original_file_osencoded ))
{
dol_print_error ( 0 , $langs -> trans ( " ErrorFileDoesNotExists " , $original_file ));
exit ;
}
2017-07-02 23:38:19 +02:00
2016-05-01 16:34:50 +02:00
//include_once $original_file_osencoded;
*/
2017-07-02 23:38:19 +02:00
2018-07-22 17:18:35 +02:00
/* print '<iframe class="websiteiframenoborder centpercent" src="' . DOL_URL_ROOT . '/public/website/index.php?website=' . $websitekey . '&pageid=' . $pageid . '"/>' ;
2016-05-01 16:34:50 +02:00
print '</iframe>' ; */
2017-10-07 13:09:31 +02:00
}
else
{
2018-12-17 17:29:04 +01:00
if ( empty ( $websitekey ) || $websitekey == '-1' )
{
print '<br><br><div class="center">' . $langs -> trans ( " NoWebSiteCreateOneFirst " ) . '</center><br><br><br>' ;
print '<div class="center"><div class="logo_setup"></div></div>' ;
}
else
{
print '<br><br><div class="center">' . $langs -> trans ( " PreviewOfSiteNotYetAvailable " , $object -> ref ) . '</center><br><br><br>' ;
print '<div class="center"><div class="logo_setup"></div></div>' ;
}
2017-10-07 13:09:31 +02:00
}
2016-04-19 11:02:55 +02:00
}
2018-08-04 15:58:05 +02:00
// End of page
2016-02-02 16:24:12 +01:00
llxFooter ();
$db -> close ();