Work on multilang support

This commit is contained in:
Laurent Destailleur 2018-10-14 18:44:29 +02:00
parent 484ac2cd9b
commit b0569de166
5 changed files with 165 additions and 79 deletions

View File

@ -19,6 +19,7 @@
/**
* \file htdocs/core/website.inc.php
* \brief Common file loaded by all website pages (after master.inc.php). It set the new object $weblangs, using parameter 'l'.
* This file is included in top of all container pages.
* The global variable $websitekey must be defined.
*/
@ -34,6 +35,36 @@ if (! is_object($weblangs))
{
$weblangs = dol_clone($langs);
}
// A lang was forced, so we change weblangs init
if (GETPOST('l','aZ09')) $weblangs->setDefaultLang(GETPOST('l','aZ09'));
// A lang was forced, so we check to find if we must make a redirect on translation page
if (! defined('USEDOLIBARREDITOR'))
{
if (GETPOST('l','aZ09'))
{
$sql ="SELECT wp.rowid, wp.lang, wp.pageurl, wp.fk_page";
$sql.=" FROM ".MAIN_DB_PREFIX."website_page as wp, ".MAIN_DB_PREFIX."website as w";
$sql.=" WHERE w.rowid = wp.fk_website AND w.ref = '".$db->escape($websitekey)."' AND fk_page = '".$db->escape($pageid)."' AND lang = '".$db->escape(GETPOST('l','aZ09'))."'";
$resql = $db->query($sql);
if ($resql)
{
$obj = $db->fetch_object($resql);
if ($obj)
{
//$pageid = $obj->rowid;
//$pageref = $obj->pageurl;
if (! defined('USEDOLIBARRSERVER')) {
// TODO Redirect
}
else
{
// TODO Redirect
}
}
}
}
}
// Load websitepage class
include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';

View File

@ -91,3 +91,5 @@ ExternalURLMustStartWithHttp=External URL must start with http:// or https://
ZipOfWebsitePackageToImport=Zip file of website package
ShowSubcontainers=Show included containers
InternalURLOfPage=Internal URL of page
ThisPageIsTranslationOf=This page/container is translation of
ThisPageHasTranslationPages=This page/container has translation

View File

@ -18,8 +18,7 @@
/**
* \file htdocs/public/website/index.php
* \ingroup website
* \brief Page to output pages
* \author Laurent Destailleur
* \brief Wrapper to output pages when website is powered by Dolibarr instead of a native web server
*/
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL',1); // Disables token renewal
@ -59,88 +58,91 @@ $accessallowed = 1;
$type='';
/*
* View
*/
if (empty($pageid))
{
require_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
require_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
$object=new Website($db);
$object->fetch(0, $websitekey);
if (empty($object->id))
{
if (empty($pageid))
{
// Return header 404
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include DOL_DOCUMENT_ROOT.'/public/error-404.php';
exit;
}
}
$objectpage=new WebsitePage($db);
if ($pageref)
{
$result=$objectpage->fetch(0, $object->id, $pageref);
if ($result > 0)
{
$pageid = $objectpage->id;
}
elseif($result == 0)
{
// Page not found from ref=pageurl, we try using alternative alias
$result=$objectpage->fetch(0, $object->id, null, $pageref);
if ($result > 0)
{
$pageid = $objectpage->id;
}
}
}
else
{
if ($object->fk_default_home > 0)
{
$result=$objectpage->fetch($object->fk_default_home);
if ($result > 0)
{
$pageid = $objectpage->id;
}
}
if (empty($pageid))
{
$array=$objectpage->fetchAll($object->id);
if (is_array($array) && count($array) > 0)
{
$firstrep=reset($array);
$pageid=$firstrep->id;
}
}
}
}
if (empty($pageid))
{
// Return header 404
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
$langs->load("website");
if (! GETPOSTISSET('pageref')) print $langs->trans("PreviewOfSiteNotYetAvailable", $websitekey);
include DOL_DOCUMENT_ROOT.'/public/error-404.php';
exit;
}
$appli=constant('DOL_APPLICATION_TITLE');
if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_APPLICATION_TITLE;
/*
* View
*/
//print 'Directory with '.$appli.' websites.<br>';
if (empty($pageid))
{
require_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
require_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
$object=new Website($db);
$object->fetch(0, $websitekey);
if (empty($object->id))
{
if (empty($pageid))
{
// Return header 404
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include DOL_DOCUMENT_ROOT.'/public/error-404.php';
exit;
}
}
$objectpage=new WebsitePage($db);
if ($pageref)
{
$result=$objectpage->fetch(0, $object->id, $pageref);
if ($result > 0)
{
$pageid = $objectpage->id;
}
elseif($result == 0)
{
// Page not found from ref=pageurl, we try using alternative alias
$result=$objectpage->fetch(0, $object->id, null, $pageref);
if ($result > 0)
{
$pageid = $objectpage->id;
}
}
}
else
{
if ($object->fk_default_home > 0)
{
$result=$objectpage->fetch($object->fk_default_home);
if ($result > 0)
{
$pageid = $objectpage->id;
}
}
if (empty($pageid))
{
$array=$objectpage->fetchAll($object->id);
if (is_array($array) && count($array) > 0)
{
$firstrep=reset($array);
$pageid=$firstrep->id;
}
}
}
}
if (empty($pageid))
{
// Return header 404
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
$langs->load("website");
if (! GETPOSTISSET('pageref')) print $langs->trans("PreviewOfSiteNotYetAvailable", $websitekey);
include DOL_DOCUMENT_ROOT.'/public/error-404.php';
exit;
}
// Security: Delete string ../ into $original_file
global $dolibarr_main_data_root;

View File

@ -193,8 +193,11 @@ class WebsitePage extends CommonObject
$this->fk_website = $obj->fk_website;
$this->type_container = $obj->type_container;
$this->pageurl = $obj->pageurl;
$this->ref = $obj->pageurl;
$this->aliasalt = preg_replace('/,+$/', '', preg_replace('/^,+/', '', $obj->aliasalt));
$this->title = $obj->title;
$this->description = $obj->description;
$this->keywords = $obj->keywords;

View File

@ -1926,10 +1926,11 @@ if (count($object->records) > 0) // There is at least one web site
// Create an array for form
$preselectedlanguage = GETPOST('newlang', 'az09') ? GETPOST('newlang', 'az09') : ($objectpage->lang ? $objectpage->lang : $langs->defaultlang);
$formquestion = array(
array('type' => 'text', 'tdclass'=>'maxwidth200', 'name' => 'pageurl', 'label'=> $langs->trans("WEBSITE_PAGENAME"), 'value'=> 'copy_of_'.$objectpage->pageurl),
array('type' => 'hidden', 'name' => 'sourcepageurl', 'value'=> $objectpage->pageurl),
array('type' => 'checkbox', 'tdclass'=>'maxwidth200', 'name' => 'is_a_translation', 'label' => $langs->trans("PageIsANewTranslation"), 'value' => 0),
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)),
array('type' => 'text', 'tdclass'=>'maxwidth200 fieldrequired', 'name' => 'pageurl', 'label'=> $langs->trans("WEBSITE_PAGENAME"), 'value'=> 'copy_of_'.$objectpage->pageurl),
);
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?website='.$object->ref.'&pageid=' . $pageid, $langs->trans('ClonePage'), '', 'confirm_createpagefromclone', $formquestion, 0, 1, 300, 550);
@ -2518,6 +2519,53 @@ if ($action == 'editmeta' || $action == 'createcontainer')
print $formadmin->select_language($pagelang?$pagelang:$langs->defaultlang, 'WEBSITE_LANG', 0, null, '1');
print '</td></tr>';
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">';
$htmlhelp=$langs->trans("WEBSITE_ALIASALTDesc");
print $form->textwithpicto($langs->trans('WEBSITE_ALIASALT'), $htmlhelp, 1, 'help', '', 0, 2, 'htmlheadertooltip');