dolibarr/htdocs/website/index.php

3410 lines
121 KiB
PHP
Raw Normal View History

2016-01-24 21:35:41 +01:00
<?php
/* 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
*/
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';
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';
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';
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';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
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
$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');
$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
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
$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
{
foreach($object->records as $key => $valwebsite)
{
2018-07-22 17:18:35 +02:00
$websitekey=$valwebsite->ref;
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);
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
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';
$filetpl=$pathofwebsite.'/page'.$pageid.'.tpl.php';
2016-08-08 18:25:37 +02:00
$fileindex=$pathofwebsite.'/index.php';
$filewrapper=$pathofwebsite.'/wrapper.php';
$filemanifestjson=$pathofwebsite.'/manifest.json.php';
2019-08-15 00:55:47 +02:00
$filereadme=$pathofwebsite.'/README.md';
2016-05-07 16:38:32 +02:00
// Define $urlwithroot
$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
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";
$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
$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
*/
// 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';
$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid.(GETPOST('section_dir', 'alpha')?'&section_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'
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');
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
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');
header("Location: ".$_SERVER["PHP_SELF"].'?website='.GETPOST('website', 'alphanohtml').'&pageid='.GETPOST('pageid', 'int'));
2018-07-20 15:01:50 +02:00
exit;
}
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();
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');
}
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');
}
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);
$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);
$db->begin();
$objectpage->fk_website = $object->id;
if (GETPOST('fetchexternalurl', 'alpha'))
{
$urltograb=GETPOST('externalurl', 'alpha');
$grabimages=GETPOST('grabimages', 'alpha');
$grabimagesinto=GETPOST('grabimagesinto', 'alpha');
//var_dump($grabimages);exit;
}
if ($urltograb)
{
include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
//if (! preg_match('/^http/', $urltograb) && ! preg_match('/^file/', $urltograb))
2018-11-30 14:30:00 +01:00
if (! preg_match('/^http/', $urltograb))
{
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';
}
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);
//$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.='/';
}
$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
// Check pageurl is not already used
2018-02-19 18:07:59 +01:00
if ($pageurl)
{
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-08-20 18:50:51 +02:00
if (! $error)
{
$tmp = getURLContent($urltograb);
if ($tmp['curl_error_no'])
{
$error++;
setEventMessages('Error getting '.$urltograb.': '.$tmp['curl_error_msg'], null, 'errors');
$action='createcontainer';
}
elseif ($tmp['http_code'] != '200')
{
$error++;
setEventMessages('Error getting '.$urltograb.': '.$tmp['http_code'], null, 'errors');
$action='createcontainer';
}
else
{
// Remove comments
$tmp['content'] = removeHtmlComment($tmp['content']);
preg_match('/<head>(.*)<\/head>/ims', $tmp['content'], $reg);
$head = $reg[1];
$objectpage->type_container = 'page';
$objectpage->pageurl = $pageurl;
if (empty($objectpage->pageurl))
{
$tmpdomain = getDomainFromURL($urltograb);
$objectpage->pageurl=$tmpdomain.'-home';
}
$objectpage->aliasalt = '';
2018-02-28 19:20:02 +01:00
if (preg_match('/^(\d+)\-/', basename($urltograb), $reg)) $objectpage->aliasalt = $reg[1];
if (preg_match('/<title>(.*)<\/title>/ims', $head, $regtmp))
{
$objectpage->title = $regtmp[1];
}
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>
}
if (preg_match('/<meta name="description"[^"]+content="([^"]+)"/ims', $head, $regtmp))
{
$objectpage->description = $regtmp[1];
}
if (preg_match('/<meta name="keywords"[^"]+content="([^"]+)"/ims', $head, $regtmp))
{
$objectpage->keywords = $regtmp[1];
}
if (preg_match('/<html\s+lang="([^"]+)"/ims', $tmp['content'], $regtmp))
{
$tmplang=explode('-', $regtmp[1]);
$objectpage->lang = $tmplang[0].($tmplang[1] ? '_'.strtoupper($tmplang[1]) : '');
}
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']);
$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);
//$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);
// 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;
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
$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
//$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
//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++;
$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++;
$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;
$tmp = preg_replace('/'.preg_quote($regs[0][$key], '/').'/i', '', $tmp);
}
2018-02-19 16:46:29 +01:00
$objectpage->htmlheader = trim($tmp)."\n";
2017-10-13 15:23:24 +02: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;
foreach ($regs[0] as $key => $val)
{
2018-11-30 14:30:00 +01:00
dol_syslog("We will grab the resources found into link tag ".$regs[2][$key]);
$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
//$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
//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']);
$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']);
$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;
$pagecsscontent.='/* Content of file '.$urltograbbis.' */'."\n";
getAllImages($object, $objectpage, $urltograbbis, $tmpgeturl['content'], $action, 1, $grabimages, $grabimagesinto);
$pagecsscontent.=$tmpgeturl['content']."\n";
$objectpage->htmlheader = preg_replace('/'.preg_quote($regs[0][$key], '/').'\n*/ims', '', $objectpage->htmlheader);
}
}
2017-10-06 22:49:08 +02:00
2018-02-19 16:46:29 +01:00
$pagecsscontent.='</style>';
//var_dump($pagecsscontent);
2017-10-06 22:49:08 +02:00
//print dol_escape_htmltag($tmp);exit;
2018-02-19 16:46:29 +01:00
$objectpage->htmlheader .= trim($pagecsscontent)."\n";
// Now loop to fetch all images into page
$tmp = $objectpage->content;
2017-10-06 22:49:08 +02:00
getAllImages($object, $objectpage, $urltograb, $tmp, $action, 1, $grabimages, $grabimagesinto);
// 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);
//print dol_escape_htmltag($tmp);exit;
$objectpage->content = $tmp;
$objectpage->grabbed_from = $urltograb;
}
}
}
else
{
$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
$sample = GETPOST('sample', 'alpha');
if (empty($sample)) $sample='empty';
$pathtosample = DOL_DOCUMENT_ROOT.'/website/samples/page-sample-'.$sample.'.html';
2018-01-07 22:04:31 +01:00
// Init content with content into pagetemplate.html, blogposttempltate.html, ...
$objectpage->content = make_substitutions(@file_get_contents($pathtosample), $substitutionarray);
}
if (! $error)
{
if (empty($objectpage->pageurl))
{
2018-02-19 16:46:29 +01:00
$langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("WEBSITE_PAGENAME")), null, 'errors');
$error++;
2017-12-12 01:40:34 +01:00
$action='createcontainer';
}
2019-01-27 10:49:34 +01:00
elseif (! preg_match('/^[a-z0-9\-\_]+$/i', $objectpage->pageurl))
{
2018-02-19 16:46:29 +01:00
$langs->load("errors");
setEventMessages($langs->transnoentities("ErrorFieldCanNotContainSpecialCharacters", $langs->transnoentities('WEBSITE_PAGENAME')), null, 'errors');
$error++;
2017-12-12 01:40:34 +01:00
$action='createcontainer';
}
if (empty($objectpage->title))
{
2018-02-19 16:46:29 +01:00
$langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("WEBSITE_TITLE")), null, 'errors');
$error++;
2017-12-12 01:40:34 +01:00
$action='createcontainer';
}
}
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';
}
}
if (! $error)
{
if (! empty($objectpage->content))
{
$filealias=$pathofwebsite.'/'.$objectpage->pageurl.'.php';
$filetpl=$pathofwebsite.'/page'.$objectpage->id.'.tpl.php';
// Save page alias
$result=dolSavePageAlias($filealias, $object, $objectpage);
if (! $result)
{
setEventMessages('Failed to write file '.$filealias, null, 'errors');
}
// 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';
}
}
}
2016-04-23 21:34:10 +02:00
if (! $error)
{
$db->commit();
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 21:29:49 +02:00
// To generate the CSS, robot and htmlheader file.
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);
}
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>";
$result=dolSaveHtmlHeader($filehtmlheader, $htmlheadercontent);
}
if (! dol_is_file($filecss))
{
2017-12-19 12:54:10 +01:00
$csscontent = "/* CSS content (all pages) */\nbody.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; }\n.bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;}";
$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);
}
if (! dol_is_file($filerobot))
{
$robotcontent = "# Robot file. Generated with Dolibarr\nUser-agent: *\nAllow: /public/\nDisallow: /administrator/";
$result=dolSaveRobotFile($filerobot, $robotcontent);
}
if (! dol_is_file($filehtaccess))
{
$htaccesscontent = "# Order allow,deny\n# Deny from all";
$result=dolSaveHtaccessFile($filehtaccess, $htaccesscontent);
}
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);
}
$action = 'preview';
2017-07-02 23:38:19 +02:00
}
2016-04-23 21:34:10 +02:00
}
// Delete site
2019-06-02 17:27:00 +02:00
if ($action == 'confirm_deletesite' && $confirm == 'yes')
{
$error = 0;
$db->begin();
2019-06-02 17:27:00 +02:00
$res = $object->fetch(GETPOST('id', 'int'));
$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);
}
}
if (! $error)
{
$db->commit();
2019-06-02 17:27:00 +02:00
setEventMessages($langs->trans("SiteDeleted", $object->ref), null, 'mesgs');
2019-06-02 17:27:00 +02:00
header("Location: ".$_SERVER["PHP_SELF"].'?id='.$object->id);
exit;
}
else
{
$db->rollback();
dol_print_error($db);
}
}
// Delete page
if ($action == 'delete')
{
2018-02-15 00:01:25 +01:00
$error = 0;
$db->begin();
2018-07-22 17:18:35 +02:00
$res = $object->fetch(0, $websitekey);
$website = $object;
$res = $objectpage->fetch($pageid, $object->fk_website);
if ($res > 0)
{
$res = $objectpage->delete($user);
2018-02-15 00:01:25 +01:00
if ($res <= 0)
{
$error++;
setEventMessages($objectpage->error, $objectpage->errors, 'errors');
}
2018-02-15 00:01:25 +01: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;
}
else
{
2018-02-15 00:01:25 +01:00
$db->rollback();
dol_print_error($db);
}
}
// Update css
if ($action == 'updatecss')
2016-04-23 21:34:10 +02: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'))
{
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)
{
$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);
if (! $result)
{
$error++;
setEventMessages('Failed to write file '.$filemaster, null, 'errors');
}
2018-12-17 17:29:04 +01:00
2019-01-23 14:57:43 +01:00
// Html header file
$htmlheadercontent ='';
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";
$htmlheadercontent.= '$websitekey=basename(__DIR__);'."\n";
$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
$htmlheadercontent.= preg_replace(array('/<html>\n*/ims','/<\/html>\n*/ims'), array('',''), GETPOST('WEBSITE_HTML_HEADER', 'none'));
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
$result = dolSaveHtmlHeader($filehtmlheader, $htmlheadercontent);
if (! $result)
{
$error++;
setEventMessages('Failed to write file '.$filehtmlheader, null, 'errors');
}
2017-07-19 16:38:00 +02:00
2019-01-23 14:57:43 +01:00
// Css file
$csscontent ='';
2019-01-23 14:57:43 +01:00
$csscontent.= "<?php // BEGIN PHP\n";
$csscontent.= '$websitekey=basename(__DIR__);'."\n";
$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
$csscontent.= trim(GETPOST('WEBSITE_CSS_INLINE', 'none'))."\n";
$csscontent.= '<?php // BEGIN PHP'."\n";
$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
$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";
$jscontent.= '$websitekey=basename(__DIR__);'."\n";
$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
$jscontent.= trim(GETPOST('WEBSITE_JS_INLINE', 'none'))."\n";
2017-10-07 03:08:01 +02:00
$jscontent.= '<?php // BEGIN PHP'."\n";
$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
$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";
$robotcontent.= '$websitekey=basename(__DIR__);'."\n";
$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
$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";
$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
$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
// Htaccess file
2019-01-23 14:57:43 +01:00
$htaccesscontent ='';
$htaccesscontent.= trim(GETPOST('WEBSITE_HTACCESS', 'none'))."\n";
2019-01-23 14:57:43 +01:00
$result = dolSaveHtaccessFile($filehtaccess, $htaccesscontent);
if (! $result)
{
$error++;
setEventMessages('Failed to write file '.$filehtaccess, null, 'errors');
}
2017-07-23 17:44:26 +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";
$manifestjsoncontent.= trim(GETPOST('WEBSITE_MANIFEST_JSON', 'none'))."\n";
$manifestjsoncontent.= '<?php // BEGIN PHP'."\n";
$manifestjsoncontent.= '$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "manifest");'."\n";
$manifestjsoncontent.= "// END PHP ?>"."\n";
$result = dolSaveManifestJson($filemanifestjson, $manifestjsoncontent);
if (! $result)
{
$error++;
setEventMessages('Failed to write file '.$filemanifestjson, null, 'errors');
}
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-07-19 16:38:00 +02:00
}
}
2016-05-02 15:51:18 +02:00
// Update page
if ($action == 'setashome')
{
$db->begin();
2018-07-22 17:18:35 +02:00
$object->fetch(0, $websitekey);
$website = $object;
$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
//-------------------------------------------------
$result = dolSaveIndexPage($pathofwebsite, $fileindex, $filetpl, $filewrapper);
2017-07-02 23:38:19 +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
$action='preview';
}
else
{
$db->rollback();
}
2016-05-02 15:51:18 +02:00
}
2016-09-15 19:27:04 +02:00
// Update page (meta)
if ($action == 'updatemeta')
{
$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;
$objectpage->fk_website = $object->id;
2017-07-21 02:30:02 +02:00
// Check parameters
if (! preg_match('/^[a-z0-9\-\_]+$/i', GETPOST('WEBSITE_PAGENAME', 'alpha')))
{
$error++;
2018-02-19 16:46:29 +01:00
$langs->load("errors");
setEventMessages($langs->transnoentities("ErrorFieldCanNotContainSpecialCharacters", $langs->transnoentities('WEBSITE_PAGENAME')), null, 'errors');
$action='editmeta';
}
2018-08-20 19:10:33 +02:00
$res = $objectpage->fetch($pageid, $object->id);
if ($res <= 0)
{
$error++;
2018-02-19 16:46:29 +01:00
setEventMessages('Page not found '.$objectpage->error, $objectpage->errors, 'errors');
}
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;
}
}
}
if (! $error)
{
$objectpage->old_object = clone $objectpage;
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');
$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');
2018-02-19 16:46:29 +01:00
$objectpage->htmlheader = trim(GETPOST('htmlheader', 'none'));
$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;
$res = $objectpage->update($user);
2018-08-20 19:10:33 +02:00
if (! ($res > 0))
{
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';
}
}
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();
}
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');
// Now delete the alias.php page
2018-02-19 16:46:29 +01:00
if (! empty($fileoldalias))
{
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);
}
// 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');
// 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');
}
}
}
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;
}
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;
}
2018-02-19 16:46:29 +01:00
$action='preview';
}
}
2016-04-23 21:34:10 +02:00
// Update page
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;
if ($action == 'confirm_createfromclone')
{
2018-09-25 20:34:05 +02:00
$db->begin();
$objectnew = new Website($db);
$result = $objectnew->createFromClone($user, GETPOST('id', 'int'), GETPOST('siteref', 'aZ09'), (GETPOST('newlang', 'aZ09')?GETPOST('newlang', 'aZ09'):''));
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;
$websitekey = GETPOST('siteref', 'aZ09');
2018-09-25 20:34:05 +02:00
$db->commit();
}
}
if ($action == 'confirm_createpagefromclone')
2017-07-21 13:38:13 +02:00
{
$istranslation=(GETPOST('is_a_translation', 'aZ09')=='on'?1:0);
if ($istranslation)
2017-07-21 13:38:13 +02:00
{
if (GETPOST('newlang', 'aZ09') == $objectpage->lang)
{
$error++;
setEventMessages($langs->trans("LanguageMustNotBeSameThanClonedPage"), null, 'errors');
$action='preview';
}
2017-07-21 13:38:13 +02:00
}
if (! $error)
{
2018-09-25 20:34:05 +02:00
$db->begin();
$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;
}
$objectpage = new WebsitePage($db);
$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)
{
$error++;
setEventMessages($objectpage->error, $objectpage->errors, 'errors');
$action='createpagefromclone';
2018-09-25 20:34:05 +02:00
$db->rollback();
}
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-03 02:09:14 +02:00
$res = 0;
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
/*if (GETPOST('savevirtualhost') && $object->virtualhost != GETPOST('previewsite'))
{
$object->virtualhost = GETPOST('previewsite', 'alpha');
$object->update($user);
}*/
$objectpage->fk_website = $object->id;
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
if (! $error && $res > 0)
{
if ($action == 'updatesource' || $action == 'updatecontent')
{
$db->begin();
2017-07-02 23:38:19 +02:00
$phpfullcodestringold = dolKeepOnlyPhpCode($objectpage->content);
$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';
}
}
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
// Clean data. We remove all the head section.
$objectpage->content = preg_replace('/<head>.*<\/head>/ims', '', $objectpage->content);
/* $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
$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-07-02 23:38:19 +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
dol_mkdir($pathofwebsite);
2017-07-02 23:38:19 +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
if (! $result) setEventMessages('Failed to write file '.$filemaster, null, 'errors');
2017-07-02 23:38:19 +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
// 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
$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);
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);
exit;
}
}
else
{
$db->rollback();
}
}
else
{
2018-07-22 17:18:35 +02:00
header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
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
}
}
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;
}
else
{
setEventMessages($object->error, $object->errors, 'errors');
2019-08-14 02:46:09 +02:00
$action = '';
}
2017-09-01 11:10:03 +02:00
}
2018-08-15 14:24:33 +02:00
// Import site
if ($action == 'importsiteconfirm')
{
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
{
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';
}
}
$fileofzip = '';
if (GETPOSTISSET('templateuserfile'))
{
$fileofzip = DOL_DATA_ROOT.'/doctemplates/websites/'.GETPOST('templateuserfile', 'alpha');
}
elseif (! empty($_FILES))
2018-08-16 21:48:16 +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
{
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
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;
}
}
}
2018-08-16 21:48:16 +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);
$formadmin = new FormAdmin($db);
2017-07-23 16:20:53 +02:00
$formwebsite = new FormWebsite($db);
$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();
$moreheadcss='';
$moreheadjs='';
$arrayofjs[]='includes/jquery/plugins/blockUI/jquery.blockUI.js';
$arrayofjs[]='core/js/blockUI.js'; // Used by ecm/tpl/enabledfiletreeajax.tpl.php
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
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'].'">';
2017-09-01 12:19:55 +02:00
if ($action == 'createsite')
{
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
}
if ($action == 'editcss')
{
print '<input type="hidden" name="action" value="updatecss">';
}
if ($action == 'editmenu')
{
print '<input type="hidden" name="action" value="updatemenu">';
}
2016-05-02 15:51:18 +02:00
if ($action == 'setashome')
{
print '<input type="hidden" name="action" value="updateashome">';
2016-05-02 15:51:18 +02:00
}
if ($action == 'editmeta')
{
print '<input type="hidden" name="action" value="updatemeta">';
}
if ($action == 'editsource')
{
print '<input type="hidden" name="action" value="updatesource">';
}
2016-04-23 21:34:10 +02:00
if ($action == 'editcontent')
{
print '<input type="hidden" name="action" value="updatecontent">';
2016-04-23 21:34:10 +02:00
}
if ($action == 'edit')
{
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')
{
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='';
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
// ***** Part for web sites
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">';
print '</div>';
// List of website
2017-10-20 23:48:42 +02:00
print '<div class="websiteselection">';
$out='';
$out.='<select name="website" class="minwidth100" id="website">';
if (empty($object->records)) $out.='<option value="-1">&nbsp;</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;
$out.='<option value="'.$valwebsite->ref.'"';
2018-07-22 17:18:35 +02:00
if ($websitekey == $valwebsite->ref) $out.=' selected'; // To preselect a value
$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").'">';
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
2018-07-22 17:18:35 +02:00
if ($websitekey)
{
$virtualurl='';
2018-07-22 17:18:35 +02:00
$dataroot=DOL_DATA_ROOT.'/website/'.$websitekey;
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'))
{
$disabled='';
if (empty($user->rights->website->write)) $disabled=' disabled="disabled"';
print ' &nbsp; ';
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">';
print '<input type="submit" class="buttonDelete" name="deletesite" value="'.$langs->trans("Delete").'"'.($atleastonepage?' disabled="disabled"':'').'>';
print ' &nbsp; ';
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>';
}
print '</div>';
2018-08-15 14:24:33 +02:00
// Toolbar for websites
2019-01-23 15:30:54 +01:00
print '<div class="websitetools websiteselection">';
2019-06-02 17:27:00 +02:00
if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite')
{
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">';
$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-07-02 23:38:19 +02:00
if (in_array($action, array('editcss','editmenu','file_manager','replacesite','replacesiteconfirm')))
{
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">';
if ($action != 'preview') print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Cancel")).'" name="preview">';
}
print '</div>';
2017-07-02 23:38:19 +02:00
2018-08-15 14:24:33 +02:00
// Toolbar for pages
2018-12-17 17:29:04 +01:00
if ($websitekey && $websitekey != '-1' && ! in_array($action, array('editcss','editmenu','importsite')))
{
print '</div>'; // Close current websitebar to open a new one
2017-07-02 23:38:19 +02:00
print '<!-- Bar for websitepage -->';
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").': ';
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">';
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')
{
$out='';
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">';
}
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
{
$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.='>';
$out.='['.$valpage->type_container.' '.sprintf("%03d", $valpage->id).'] ';
$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">&nbsp;</option>';
$out.='</select>';
if ($atleastonepage && $action != 'editsource')
{
$out.=ajax_combobox('pageid');
}
else
{
$out.='<input type="hidden" name="pageid" value="'.$pageid.'">';
$out.=ajax_combobox('pageid');
}
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"').'>';
print '<input type="image" class="valignmiddle" src="'.img_picto('', 'refresh', '', 0, 1).'" name="refreshpage" value="'.$langs->trans("Load").'"'.(($atleastonepage && $action != 'editsource')?'':' disabled="disabled"').'>';
// Print nav arrows
$pagepreviousid=0;
$pagenextid=0;
2018-06-11 09:22:50 +02:00
if ($pageid)
{
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-06-11 09:22:50 +02:00
$obj = $db->fetch_object($resql);
if ($obj)
{
$pagepreviousid = $obj->pagepreviousid;
}
}
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-06-11 09:22:50 +02:00
$obj = $db->fetch_object($resql);
if ($obj)
{
$pagenextid = $obj->pagenextid;
}
}
2018-06-11 09:22:50 +02:00
else dol_print_error($db);
}
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-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')
{
$disabled='';
if (empty($user->rights->website->write)) $disabled=' disabled="disabled"';
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;
}
// 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),
//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))
);
$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
{
// 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);
$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)),
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-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);
print $formconfirm;
}
2017-07-02 23:38:19 +02:00
print ' &nbsp; ';
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">';
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))
{
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
{
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))
{
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
{
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">';
print '<input type="submit" class="buttonDelete" name="delete" value="'.$langs->trans("Delete").'"'.($atleastonepage?'':' disabled="disabled"').'>';
}
}
2016-09-14 23:23:22 +02:00
print '</div>'; // end website selection
2017-07-02 23:38:19 +02:00
print '<div class="websitetools">';
2019-06-02 17:27:00 +02:00
if (($pageid > 0 && $atleastonepage) && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite'))
{
2018-07-22 17:18:35 +02:00
$realpage=$urlwithroot.'/public/website/index.php?website='.$websitekey.'&pageref='.$websitepage->pageurl;
$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');
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');
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").'">';
// TODO Add js to save alias like we save virtual host name and use dynamic virtual host for url of id=previewpageext
}
if (! in_array($action, array('editcss','editmenu','file_manager','replacesite','replacesiteconfirm','createsite','createcontainer','createfromclone','createpagefromclone','deletesite')))
{
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">';
if ($action != 'preview') print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Cancel")).'" name="preview">';
}
print '</div>'; // end websitetools
print '<div class="websitehelp">';
if (GETPOST('editsource', 'alpha') || GETPOST('editcontent', 'alpha'))
{
2017-11-15 19:47:07 +01:00
$htmltext=$langs->transnoentitiesnoconv("YouCanEditHtmlSource").'<br>';
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');
}
}
print '</div>'; // end websitehelp
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() {
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 });
}
else jQuery("a.websitebuttonsitepreviewdisabled img").css({ opacity: 0.2 });
2018-02-15 01:29:51 +01:00
';
print '
});
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\',
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>';
}
}
}
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
*/
if ($action == 'editcss')
2016-02-02 16:24:12 +01:00
{
print '<div class="fiche">';
print '<br>';
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;}";
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');
}
if (! trim($jscontent)) $jscontent='/* JS content (all pages) */'."\n";
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>';
}
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');
}
if (! trim($robotcontent))
{
$robotcontent.="# Robot file. Generated with ".DOL_APPLICATION_TITLE."\n";
$robotcontent.="User-agent: *\n";
$robotcontent.="Allow: /public/\n";
$robotcontent.="Disallow: /administrator/\n";
}
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');
}
if (! trim($htaccesscontent))
{
$htaccesscontent.="# Order allow,deny\n";
2017-07-23 17:44:26 +02:00
$htaccesscontent.="# Deny from all\n";
}
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.="";
}
dol_fiche_head();
print '<!-- Edit CSS -->'."\n";
print '<table class="border" width="100%">';
// Website
print '<tr><td class="titlefieldcreate">';
print $langs->trans('WebSite');
print '</td><td>';
2018-07-22 17:18:35 +02:00
print $websitekey;
print '</td></tr>';
// 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>';
// 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');
print '</td><td>';
2017-07-19 16:38:00 +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');
print '</td></tr>';
// JS file
print '<tr><td class="tdtop">';
print $langs->trans('WEBSITE_JS_INLINE');
print '</td><td>';
2017-10-07 03:08:01 +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');
print '</td></tr>';
2017-10-07 03:08:01 +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');
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');
print '</td></tr>';
2017-07-23 17:44:26 +02:00
// Robot file
2017-07-23 17:44:26 +02:00
print '<tr><td class="tdtop">';
print $langs->trans('WEBSITE_ROBOT');
print '</td><td>';
2017-07-23 17:44:26 +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
print '</td></tr>';
2017-07-23 17:44:26 +02:00
// .htaccess
2017-07-23 17:44:26 +02:00
print '<tr><td class="tdtop">';
print $langs->trans('WEBSITE_HTACCESS');
print '</td><td>';
2017-07-23 17:44:26 +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
print '</td></tr>';
2017-07-10 23:44:46 +02:00
// Manifest.json
2019-01-23 14:57:43 +01:00
print '<tr><td class="tdtop">';
$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
$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
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>';
print '</table>';
dol_fiche_end();
print '</div>';
print '<br>';
}
2018-05-25 17:52:24 +02:00
2017-09-01 12:19:55 +02:00
if ($action == 'createsite')
{
print '<div class="fiche">';
2017-09-01 12:19:55 +02:00
print '<br>';
2017-09-01 12:19:55 +02:00
/*$h = 0;
$head = array();
$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
print '<!-- Add site -->'."\n";
//print '<div class="fichecenter">';
2017-09-01 12:19:55 +02:00
print '<table class="border" width="100%">';
2017-09-01 12:19:55 +02: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
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
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
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');
print '</td><td>';
print '<input type="text" class="flat minwidth300" name="virtualhost" value="'.dol_escape_htmltag(GETPOST('virtualhost', 'alpha')).'">';
print '</td></tr>';
2017-09-01 12:19:55 +02:00
print '</table>';
2017-09-01 12:19:55 +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").'">';
print '<input class="button" type="submit" name="preview" value="'.$langs->trans("Cancel").'">';
2017-09-01 12:19:55 +02:00
print '</div>';
}
2017-09-01 12:19:55 +02:00
//print '</div>';
//dol_fiche_end();
2017-09-01 12:19:55 +02:00
print '</div>';
2017-09-01 12:19:55 +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);
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
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')
{
print '<div class="fiche">';
2017-07-02 23:38:19 +02:00
print '<br>';
2017-07-02 23:38:19 +02:00
2017-09-01 12:19:55 +02:00
/*$h = 0;
$head = array();
$head[$h][0] = dol_buildpath('/website/index.php',1).'?id='.$object->id;
$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";
//print '<div class="fichecenter">';
if ($action == 'createcontainer')
{
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');
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");
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-01 21:29:49 +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')
{
print '<tr><td class="titlefield">';
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');
print '</td><td>';
2018-07-22 17:18:35 +02:00
print '/public/website/index.php?website='.urlencode($websitekey).'&pageid='.urlencode($pageid);
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;
$pageurl=$objectpage->pageurl;
$pagealiasalt=$objectpage->aliasalt;
$pagetitle=$objectpage->title;
$pagedescription=$objectpage->description;
$pageimage=$objectpage->image;
$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;
}
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
}
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');
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
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
print '<tr><td class="titlefield fieldrequired">';
print $langs->trans('WEBSITE_TYPE_CONTAINER');
print '</td><td>';
print $formwebsite->selectTypeOfContainer('WEBSITE_TYPE_CONTAINER', (GETPOST('WEBSITE_TYPE_CONTAINER', 'alpha')?GETPOST('WEBSITE_TYPE_CONTAINER', 'alpha'):$type_container));
print '</td></tr>';
if ($action == 'createcontainer')
{
print '<tr><td class="titlefield fieldrequired">';
print $langs->trans('WEBSITE_PAGE_EXAMPLE');
print '</td><td>';
print $formwebsite->selectSampleOfContainer('sample', (GETPOSTISSET('sample')?GETPOST('sample', 'alpha'):'empty'));
print '</td></tr>';
}
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>';
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');
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);
}
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');
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');
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%', '');
print $doleditor->Create(1, '', true, 'HTML Header', 'html');
print '</td></tr>';
print '</table>';
2017-12-12 01:40:34 +01:00
if ($action == 'createcontainer')
{
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").'">';
print '<input class="button" type="submit" name="preview" value="'.$langs->trans("Cancel").'">';
2017-08-20 18:50:51 +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)
{
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>';
}
//print '</div>';
//dol_fiche_end();
print '</div>';
print '<br>';
2016-04-19 11:02:55 +02:00
}
2017-11-18 15:41:30 +01:00
if ($action == 'editfile' || $action == 'file_manager')
{
print '<!-- Edit Media -->'."\n";
2019-05-28 16:10:11 +02:00
print '<div class="fiche"><br>';
//print '<div class="center">'.$langs->trans("FeatureNotYetAvailable").'</center>';
$module = 'medias';
if (empty($url)) $url=DOL_URL_ROOT.'/website/index.php'; // Must be an url without param
include DOL_DOCUMENT_ROOT.'/core/tpl/filemanager.tpl.php';
2017-11-18 13:09:12 +01:00
print '</div>';
}
2016-04-19 11:02:55 +02:00
if ($action == 'editmenu')
{
print '<!-- Edit Menu -->'."\n";
print '<div class="center">'.$langs->trans("FeatureNotYetAvailable").'</center>';
2016-04-19 11:02:55 +02:00
}
if ($action == 'editsource')
{
2018-09-24 15:14:32 +02:00
// Editing with source editor
$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";
$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"]);
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
$doleditor=new DolEditor('PAGE_CONTENT', $contentforedit, '', $maxheightwin, 'Full', '', true, true, 'ace', ROWS_5, '40%');
$doleditor->Create(0, '', false, 'HTML Source', 'php');
}
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
$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";
$contentforedit .= $objectpage->content;
2017-07-02 23:38:19 +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
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
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">';
print '<input type="hidden" name="website" value="'.$website->ref.'">';
print '<!-- Replace string -->'."\n";
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>';
}
if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone')
2016-04-19 11:02:55 +02:00
{
if ($pageid > 0 && $atleastonepage)
{
2018-07-24 01:10:38 +02:00
// $filejs
// $filecss
// $filephp
// Ouput page under the Dolibarr top menu
$objectpage->fetch($pageid);
$jscontent = @file_get_contents($filejs);
$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";
$out.="<!-- htmlheader/style of page from database -->\n";
2019-08-13 06:52:07 +02:00
$out.=dolWebsiteReplacementOfLinks($object, $objectpage->htmlheader, 1, 'htmlheader');
$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
// REPLACEMENT OF LINKS When page called by website editor
2017-07-02 23:38:19 +02: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
$tmpout=preg_replace('/}[\s\n]*body\s*{[^}]+}/ims', '}', $tmpout);
2017-12-17 16:24:47 +01:00
$out.=$tmpout;
$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";
$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
{
// 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
{
// Keep the contenteditable="true" when mode Edit Inline is on
2018-07-19 21:35:21 +02:00
}
$out.=dolWebsiteReplacementOfLinks($object, $newcontent, 0, 'html', $objectpage->id)."\n";
//$out.=$newcontent;
2017-07-02 23:38:19 +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";
$out.= "\n".'<!-- End page content '.$filetpl.' -->'."\n\n";
2017-07-02 23:38:19 +02:00
print $out;
2017-07-02 23:38:19 +02:00
/*file_put_contents($filetpl, $out);
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
// 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
//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.'"/>';
print '</iframe>';*/
}
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>';
}
}
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();