Browse Source

Work on multilang support

Laurent Destailleur 6 years ago
parent
commit
b0569de166

+ 31 - 0
htdocs/core/website.inc.php

@@ -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';

+ 2 - 0
htdocs/langs/en_US/website.lang

@@ -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

+ 74 - 72
htdocs/public/website/index.php

@@ -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,89 +58,92 @@ $accessallowed = 1;
 $type='';
 
 
-/*
- * View
- */
-
-$appli=constant('DOL_APPLICATION_TITLE');
-if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_APPLICATION_TITLE;
-
-//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';
+	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);
+	$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);
+
+			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);
+	// Return header 404
+	header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
 
-    $langs->load("website");
+	$langs->load("website");
 
-    if (! GETPOSTISSET('pageref')) print $langs->trans("PreviewOfSiteNotYetAvailable", $websitekey);
+	if (! GETPOSTISSET('pageref')) print $langs->trans("PreviewOfSiteNotYetAvailable", $websitekey);
 
-    include DOL_DOCUMENT_ROOT.'/public/error-404.php';
-    exit;
+	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>';
+
+
 // Security: Delete string ../ into $original_file
 global $dolibarr_main_data_root;
 

+ 3 - 0
htdocs/website/class/websitepage.class.php

@@ -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;

+ 49 - 1
htdocs/website/index.php

@@ -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');