From 565de9bc8d3d0a8e9d6e709147893a81795533aa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jul 2017 23:38:19 +0200 Subject: [PATCH] Debug module website --- htdocs/langs/en_US/website.lang | 3 +- htdocs/public/test/test_sessionlock.php | 3 +- htdocs/websites/class/websitepage.class.php | 12 +- htdocs/websites/index.php | 227 +++++++++++--------- 4 files changed, 130 insertions(+), 115 deletions(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 03069d6f649..4482093b26d 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -25,4 +25,5 @@ RealURL=Real URL ViewWebsiteInProduction=View web site using home URLs SetHereVirtualHost=If you can set, on your web server, a dedicated virtual host with a root directory on %s, define here the virtual hostname so the preview can be done also using this direct web server access and not only using Dolibarr server. PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s -PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that URL of pages are not user friendly and start with path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that point on directory
%s
then enter the name of this virtual server and clicking on the other preview button. +PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that URL of pages are not user friendly and start with path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that point on directory
%s
then enter the name of this virtual server and click on the other preview button. +NoPageYet=No pages yet \ No newline at end of file diff --git a/htdocs/public/test/test_sessionlock.php b/htdocs/public/test/test_sessionlock.php index b0eb25d831e..7df6cce4f28 100644 --- a/htdocs/public/test/test_sessionlock.php +++ b/htdocs/public/test/test_sessionlock.php @@ -12,9 +12,10 @@ if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't ne if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); // Do not load ajax.lib.php library if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session) // If you don't need session management (can't be logged if no session used). You must also set -// NOCSRFCHECK, NOTOKENRENEWAL, NOLOGIN, +// NOCSRFCHECK, NOTOKENRENEWAL, NOLOGIN // Disable module with GETPOST('disablemodules') won't work. Variable 'dol_...' will not be set. // $_SESSION are then simple vars if sessions are not active. +// TODO We can close session with session_write_close() as soon as we just need read access. if (! defined("NOSESSION")) define("NOSESSION",'1'); define('REQUIRE_JQUERY_MULTISELECT','select2'); diff --git a/htdocs/websites/class/websitepage.class.php b/htdocs/websites/class/websitepage.class.php index c454a7d3502..99fd4d64603 100644 --- a/htdocs/websites/class/websitepage.class.php +++ b/htdocs/websites/class/websitepage.class.php @@ -193,7 +193,6 @@ class WebsitePage extends CommonObject $sql = 'SELECT'; $sql .= ' t.rowid,'; - $sql .= " t.fk_website,"; $sql .= " t.pageurl,"; $sql .= " t.title,"; @@ -203,7 +202,6 @@ class WebsitePage extends CommonObject $sql .= " t.status,"; $sql .= " t.date_creation,"; $sql .= " t.tms as date_modification"; - $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; //$sql .= ' WHERE entity IN ('.getEntity('website').')'; // entity is on website level $sql .= ' WHERE 1 = 1'; @@ -214,7 +212,7 @@ class WebsitePage extends CommonObject $sql .= ' AND t.rowid = ' . $id; } $sql .= $this->db->plimit(1); - + $resql = $this->db->query($sql); if ($resql) { $numrows = $this->db->num_rows($resql); @@ -278,7 +276,7 @@ class WebsitePage extends CommonObject $sql .= " t.date_creation,"; $sql .= " t.tms as date_modification"; $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t'; - $sql .= ' WHERE t.fk_website = '.$websiteid; + $sql .= ' WHERE t.fk_website = '.$websiteid; // Manage filter $sqlwhere = array(); if (count($filter) > 0) { @@ -399,9 +397,9 @@ class WebsitePage extends CommonObject if ($this->old_object->pageurl != $this->pageurl) { dol_syslog("The alias was changed, we must rename/recreate the page file into document"); - + } - + if (!$error && !$notrigger) { // Uncomment this and change MYOBJECT to your own tag if you // want this action calls a trigger. @@ -628,7 +626,7 @@ class WebsitePage extends CommonObject $this->id = 0; $now=dol_now(); - + $this->fk_website = ''; $this->pageurl = ''; $this->title = 'My Page'; diff --git a/htdocs/websites/index.php b/htdocs/websites/index.php index 8138100ab77..183fa45298a 100644 --- a/htdocs/websites/index.php +++ b/htdocs/websites/index.php @@ -49,7 +49,7 @@ function llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); print ''; - + // top menu and left menu area if (empty($conf->dol_hide_topmenu)) { @@ -145,7 +145,7 @@ $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain */ if (GETPOST('refreshsite')) $pageid=0; // If we change the site, we reset the pageid. -if (GETPOST('refreshpage')) $action='preview'; +if (GETPOST('refreshpage')) $action='preview'; // Add page @@ -160,10 +160,17 @@ if ($action == 'add') $objectpage->description = GETPOST('WEBSITE_DESCRIPTION'); $objectpage->keywords = GETPOST('WEBSITE_KEYWORD'); - if (empty($objectpage->title)) + if (empty($objectpage->pageurl)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("WEBSITE_PAGENAME")), null, 'errors'); $error++; + $action='create'; + } + if (empty($objectpage->title)) + { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("WEBSITE_TITLE")), null, 'errors'); + $error++; + $action='create'; } if (! $error) @@ -185,9 +192,12 @@ if ($action == 'add') { $db->rollback(); } - - $action = 'preview'; - $id = $objectpage->id; + + if (! $error) + { + $action = 'preview'; + $id = $objectpage->id; + } } // Update page @@ -212,7 +222,7 @@ if ($action == 'delete') { $db->commit(); setEventMessages($langs->trans("PageDeleted", $objectpage->pageurl, $website), null, 'mesgs'); - + header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website); exit; } @@ -246,7 +256,7 @@ if ($action == 'updatecss') $error++; $db->rollback(); }*/ - + $csscontent = ''."\n"; $csscontent.= ''."\n"; $csscontent.= '"."\n"; $csscontent.= ''."\n"; $csscontent.= GETPOST('WEBSITE_CSS_INLINE'); - + dol_syslog("Save file css into ".$filecss); - + dol_mkdir($pathofwebsite); $result = file_put_contents($filecss, $csscontent); if (! empty($conf->global->MAIN_UMASK)) @chmod($filecss, octdec($conf->global->MAIN_UMASK)); - + if (! $result) { $error++; setEventMessages('Failed to write file '.$filecss, null, 'errors'); } - + if (! $error) { setEventMessages($langs->trans("Saved"), null, 'mesgs'); } - + $action='preview'; } @@ -289,11 +299,11 @@ if ($action == 'setashome') $error++; setEventMessages($objectpage->error, $objectpage->errors, 'errors'); } - + if (! $error) { $db->commit(); - + // Generate the index.php page to be the home page //------------------------------------------------- dol_mkdir($pathofwebsite); @@ -306,10 +316,10 @@ if ($action == 'setashome') $result = file_put_contents($fileindex, $indexcontent); if (! empty($conf->global->MAIN_UMASK)) @chmod($fileindex, octdec($conf->global->MAIN_UMASK)); - + if ($result) setEventMessages($langs->trans("Saved"), null, 'mesgs'); else setEventMessages('Failed to write file '.$fileindex, null, 'errors'); - + $action='preview'; } else @@ -330,7 +340,7 @@ if ($action == 'updatemeta') if ($res > 0) { $objectpage->old_object = clone $objectpage; - + $objectpage->pageurl = GETPOST('WEBSITE_PAGENAME'); $objectpage->title = GETPOST('WEBSITE_TITLE'); $objectpage->description = GETPOST('WEBSITE_DESCRIPTION'); @@ -353,11 +363,11 @@ if ($action == 'updatemeta') dol_mkdir($pathofwebsite); - + // Now generate the master.inc.php page dol_syslog("We regenerate the master file"); dol_delete_file($filemaster); - + $mastercontent = 'global->MAIN_UMASK)) @chmod($filemaster, octdec($conf->global->MAIN_UMASK)); - + if (! $result) setEventMessages('Failed to write file '.$filemaster, null, 'errors'); - - + + // 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); } - + $aliascontent = 'id.".tpl.php';\n"; @@ -383,15 +393,15 @@ if ($action == 'updatemeta') $result = file_put_contents($filealias, $aliascontent); if (! empty($conf->global->MAIN_UMASK)) @chmod($filealias, octdec($conf->global->MAIN_UMASK)); - + if (! $result) setEventMessages('Failed to write file '.$filealias, null, 'errors'); // Now create the .tpl file (duplicate code with actions updatecontent but we need this to save new header) dol_syslog("We regenerate the tpl page filetpl=".$filetpl); - + dol_delete_file($filetpl); - + $tplcontent =''; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; @@ -407,7 +417,7 @@ if ($action == 'updatemeta') $tplcontent.= ''."\n"; $tplcontent.= ''.dol_escape_htmltag($objectpage->title).''."\n"; $tplcontent.= ''."\n"; - + $tplcontent.= ''."\n"; $tplcontent.= $objectpage->content."\n"; $tplcontent.= ''."\n"; @@ -415,7 +425,7 @@ if ($action == 'updatemeta') $result = file_put_contents($filetpl, $tplcontent); if (! empty($conf->global->MAIN_UMASK)) @chmod($filetpl, octdec($conf->global->MAIN_UMASK)); - + if ($result) { setEventMessages($langs->trans("Saved"), null, 'mesgs'); @@ -423,7 +433,7 @@ if ($action == 'updatemeta') //exit; } else setEventMessages('Failed to write file '.$filetpl, null, 'errors'); - + $action='preview'; } else @@ -447,55 +457,60 @@ if ($action == 'updatecontent' || GETPOST('refreshsite') || GETPOST('refreshpage $object->virtualhost = GETPOST('previewsite', 'alpha'); $object->update($user); }*/ - + $objectpage->fk_website = $object->id; - if ($pageid > 0) + if ($pageid > 0) { $res = $objectpage->fetch($pageid); } - else + else { - $res = $objectpage->fetch($object->fk_default_home); - if (! $res > 0) + $res=0; + if ($object->fk_default_home > 0) { - $res = $objectpage->fetch(0, $object->fk_website); + $res = $objectpage->fetch($object->fk_default_home); + } + if (! ($res > 0)) + { + $res = $objectpage->fetch(0, $object->id); } } + if ($res > 0) { if ($action == 'updatecontent') { $db->begin(); - + $objectpage->content = GETPOST('PAGE_CONTENT'); - + // Clean data. We remove all the head section. $objectpage->content = preg_replace('//s', '', $objectpage->content); /* $objectpage->content = preg_replace('//s', '', $objectpage->content); */ - + $res = $objectpage->update($user); if ($res < 0) { $error++; setEventMessages($objectpage->error, $objectpage->errors, 'errors'); } - + if (! $error) { $db->commit(); - + $filemaster=$pathofwebsite.'/master.inc.php'; //$fileoldalias=$pathofwebsite.'/'.$objectpage->old_object->pageurl.'.php'; $filealias=$pathofwebsite.'/'.$objectpage->pageurl.'.php'; - + dol_mkdir($pathofwebsite); - - + + // Now generate the master.inc.php page dol_syslog("We regenerate the master file"); dol_delete_file($filemaster); - + $mastercontent = 'global->MAIN_UMASK)) @chmod($filemaster, octdec($conf->global->MAIN_UMASK)); - + if (! $result) setEventMessages('Failed to write file '.$filemaster, null, 'errors'); - - + + // 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); } - + $aliascontent = 'id.".tpl.php';\n"; @@ -521,13 +536,13 @@ if ($action == 'updatecontent' || GETPOST('refreshsite') || GETPOST('refreshpage $result = file_put_contents($filealias, $aliascontent); if (! empty($conf->global->MAIN_UMASK)) @chmod($filealias, octdec($conf->global->MAIN_UMASK)); - + if (! $result) setEventMessages('Failed to write file '.$filealias, null, 'errors'); - - + + // Now create the .tpl file with code to be able to make dynamic changes dol_delete_file($filetpl); - + $tplcontent =''; $tplcontent.= "'."\n"; $tplcontent.= ''.dol_escape_htmltag($objectpage->title).''."\n"; $tplcontent.= ''."\n"; - + $tplcontent.= ''."\n"; $tplcontent.= $objectpage->content."\n"; $tplcontent.= ''."\n"; - + $tplcontent.= '"."\n"; - - //var_dump($filetpl);exit; + + //var_dump($filetpl);exit; $result = file_put_contents($filetpl, $tplcontent); if (! empty($conf->global->MAIN_UMASK)) @chmod($filetpl, octdec($conf->global->MAIN_UMASK)); - + if ($result) { setEventMessages($langs->trans("Saved"), null, 'mesgs'); header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid); exit; } - else + else { - setEventMessages('Failed to write file '.$filetpl, null, 'errors'); + setEventMessages('Failed to write file '.$filetpl, null, 'errors'); header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid); exit; } @@ -586,7 +601,7 @@ if ($action == 'updatecontent' || GETPOST('refreshsite') || GETPOST('refreshpage } else { - dol_print_error($db, 'Page not found'); + setEventMessages($langs->trans("NoPageYet"), null, 'warnings'); } } @@ -644,7 +659,7 @@ print '
'; if (count($object->records) > 0) { // ***** Part for web sites - + print '
'; print $langs->trans("Website").': '; print '
'; @@ -678,20 +693,20 @@ if (count($object->records) > 0) $dataroot=DOL_DATA_ROOT.'/websites/'.$website; if (! empty($object->virtualhost)) $virtualurl=$object->virtualhost; } - + if ($website && $action == 'preview') { $disabled=''; if (empty($user->rights->websites->write)) $disabled=' disabled="disabled"'; - + print '   '; - + //print ''; print ''; print ''; print ''; } - + print '
'; // Button for websites @@ -705,7 +720,7 @@ if (count($object->records) > 0) $htmltext=$langs->trans("SetHereVirtualHost", $dataroot); print $form->textwithpicto('', $htmltext); print ''; - + $urlext=$virtualurl; $urlint=$urlwithroot.'/public/websites/index.php?website='.$website; //if (! empty($object->virtualhost)) @@ -714,7 +729,7 @@ if (count($object->records) > 0) print $form->textwithpicto('', $langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $dataroot, $urlext?$urlext:$langs->trans("VirtualHostUrlNotDefined")), 1, 'preview_ext'); print ''; //} - + print 'transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $urlint)).'">'; print $form->textwithpicto('', $langs->trans("PreviewSiteServedByDolibarr", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $urlint, $dataroot), 1, 'preview'); print ''; @@ -726,12 +741,12 @@ if (count($object->records) > 0) if (preg_match('/^create/',$action)) print ''; if (preg_match('/^edit/',$action)) print ''; } - + print ''; // ***** Part for pages - + if ($website) { print ''; @@ -739,13 +754,13 @@ if (count($object->records) > 0) $array=$objectpage->fetchAll($object->id); if (! is_array($array) && $array < 0) dol_print_error('', $objectpage->error, $objectpage->errors); $atleastonepage=(is_array($array) && count($array) > 0); - + print '
'; print '
'; print $langs->trans("Page").': '; print '
'; print '
'; - + if ($action != 'add') { $out=''; @@ -762,7 +777,7 @@ if (count($object->records) > 0) } $pageid=$homepageid?$homepageid:$firstpageid; // We choose home page and if not defined yet, we take first page } - + foreach($array as $key => $valpage) { $out.='
'; print '
'; print '
'; @@ -815,17 +830,17 @@ if (count($object->records) > 0) { $websitepage = new WebSitePage($db); $websitepage->fetch($pageid); - + $realpage=$urlwithroot.'/public/websites/index.php?website='.$website.'&page='.$pageid; $pagealias = $websitepage->pageurl; - + print '
'; print ''; //print ''; $htmltext=$langs->trans("WEBSITE_PAGENAME", $pagealias); print $form->textwithpicto('', $htmltext); print '
'; - + if (! empty($object->virtualhost)) { $urlext=$virtualurl.'/'.$pagealias.'.php'; @@ -839,12 +854,12 @@ if (count($object->records) > 0) print $form->textwithpicto('', $langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $dataroot, $urlext?$urlext:$langs->trans("VirtualHostUrlNotDefined")), 1, 'preview_ext'); print ''; } - + print 'transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $realpage)).'">'; - print $form->textwithpicto('', $langs->trans("PreviewSiteServedByDolibarr", $langs->transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $realpage, $dataroot), 1, 'preview'); + print $form->textwithpicto('', $langs->trans("PreviewSiteServedByDolibarr", $langs->transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $realpage, $dataroot), 1, 'preview'); print ''; // View page in new Tab //print ''; - + // 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','create'))) @@ -853,7 +868,7 @@ if (count($object->records) > 0) if (preg_match('/^create/',$action)) print ''; if (preg_match('/^edit/',$action)) print ''; } - + print '
'; if ($action == 'preview') @@ -880,7 +895,7 @@ if (count($object->records) > 0) }, context: document.body }); - + jQuery("#previewsiteext").attr("href",newurl); jQuery("#previewpageext").attr("href",newpage); }); @@ -917,8 +932,8 @@ if ($action == 'editcss') $csscontent = @file_get_contents($filecss); // Clean the php css file to remove php code and get only css part - $csscontent = preg_replace('//s', '', $csscontent); - + $csscontent = preg_replace('//s', '', $csscontent); + dol_fiche_head(); print ''."\n"; @@ -956,14 +971,14 @@ if ($action == 'editcss') if ($action == 'editmeta' || $action == 'create') { print '
'; - + print '
'; - + dol_fiche_head(); - + print ''."\n"; print ''; - + if ($action != 'create') { print ''; - + print '
'; @@ -986,7 +1001,7 @@ if ($action == 'editmeta' || $action == 'create') print ''; print ''; print '
'; print $langs->trans('WEBSITE_TITLE'); print ''; @@ -1031,15 +1046,15 @@ if ($action == 'editcontent') /* * Editing global variables not related to a specific theme */ - + $csscontent = @file_get_contents($filecss); - + $contentforedit = ''; /*$contentforedit.=''."\n";*/ $contentforedit .= $objectpage->content; - + 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); @@ -1056,23 +1071,23 @@ if ($action == 'preview') $objectpage->fetch($pageid); $out = "\n".''."\n"; - + $out.='
'."\n"; - + $csscontent = @file_get_contents($filecss); - + $out.=''."\n"; - + $out.=$objectpage->content."\n"; - + $out.='
'; - + $out.= "\n".''."\n\n"; - + print $out; - + /*file_put_contents($filetpl, $out); if (! empty($conf->global->MAIN_UMASK)) @chmod($filetpl, octdec($conf->global->MAIN_UMASK)); @@ -1080,17 +1095,17 @@ if ($action == 'preview') // 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 - + // 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; } - + //include_once $original_file_osencoded; */ - + /*print '';*/ }