From 54b47d7f4f2be3de625234830c0d15d9fe5877ab Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Mon, 8 Aug 2016 18:25:37 +0200
Subject: [PATCH] Fix edit of page in module website

Conflicts:
	htdocs/websites/class/website.class.php
---
 htdocs/install/mysql/tables/llx_website.sql |   1 +
 htdocs/websites/class/website.class.php     |   1 +
 htdocs/websites/index.php                   | 111 ++++++++++++++++++--
 3 files changed, 102 insertions(+), 11 deletions(-)

diff --git a/htdocs/install/mysql/tables/llx_website.sql b/htdocs/install/mysql/tables/llx_website.sql
index 8dd257ffa69..331e6b085bd 100644
--- a/htdocs/install/mysql/tables/llx_website.sql
+++ b/htdocs/install/mysql/tables/llx_website.sql
@@ -25,6 +25,7 @@ CREATE TABLE llx_website
 	description   varchar(255),
 	status		  integer,
 	fk_default_home integer, 
+	virtualhost   varchar(255), 
     date_creation     datetime,
     date_modification datetime,
 	tms           timestamp
diff --git a/htdocs/websites/class/website.class.php b/htdocs/websites/class/website.class.php
index e87e830bb77..b7c8f02d20c 100644
--- a/htdocs/websites/class/website.class.php
+++ b/htdocs/websites/class/website.class.php
@@ -380,6 +380,7 @@ class Website extends CommonObject
 		$sql .= ' description = '.(isset($this->description)?"'".$this->db->escape($this->description)."'":"null").',';
 		$sql .= ' status = '.(isset($this->status)?$this->status:"null").',';
 		$sql .= ' fk_default_home = '.(($this->fk_default_home > 0)?$this->fk_default_home:"null").',';
+		$sql .= ' virtualhost = '.(($this->virtualhost != '')?"'".$this->db->escape($this->virtualhost)."'":"null").',';
 		$sql .= ' date_creation = '.(! isset($this->date_creation) || dol_strlen($this->date_creation) != 0 ? "'".$this->db->idate($this->date_creation)."'" : 'null').',';
 		$sql .= ' date_modification = '.(! isset($this->date_modification) || dol_strlen($this->date_modification) != 0 ? "'".$this->db->idate($this->date_modification)."'" : 'null').',';
 		$sql .= ' tms = '.(dol_strlen($this->tms) != 0 ? "'".$this->db->idate($this->tms)."'" : "'".$this->db->idate(dol_now())."'");
diff --git a/htdocs/websites/index.php b/htdocs/websites/index.php
index 8fdd09c30ae..16bdd23d4ce 100644
--- a/htdocs/websites/index.php
+++ b/htdocs/websites/index.php
@@ -125,6 +125,7 @@ global $dolibarr_main_data_root;
 $pathofwebsite=$dolibarr_main_data_root.'/websites/'.$website;
 $filecss=$pathofwebsite.'/styles.css.php';
 $filetpl=$pathofwebsite.'/page'.$pageid.'.tpl.php';
+$fileindex=$pathofwebsite.'/index.php';
 
 // Define $urlwithroot
 $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
@@ -279,13 +280,16 @@ if ($action == 'updatecss')
     $csscontent ='<?php'."\n";
     $csscontent.= "header('Content-type: text/css');\n";
     $csscontent.= "?>"."\n";
-    $csscontent .= GETPOST('WEBSITE_CSS_INLINE');
+    $csscontent.= GETPOST('WEBSITE_CSS_INLINE');
     
     dol_mkdir($pathofwebsite);
-    file_put_contents($filecss, $csscontent);
+    $result = file_put_contents($filecss, $csscontent);
     if (! empty($conf->global->MAIN_UMASK))
         @chmod($filecss, octdec($conf->global->MAIN_UMASK));
-    
+
+    if ($result) setEventMessages($langs->trans("Saved"), null, 'mesgs');
+    else setEventMessages('Failed to write file '.$fileindex, null, 'errors');
+        
     $action='preview';
 }
 
@@ -306,7 +310,23 @@ if ($action == 'setashome')
     if (! $error)
     {
         $db->commit();
-        setEventMessages($langs->trans("Saved"), null, 'mesgs');
+        
+        // Generate the index.php page to be the home page
+        //-------------------------------------------------
+        dol_mkdir($pathofwebsite);
+        dol_delete_file($fileindex);
+
+        $indexcontent = '<?php'."\n";
+        $indexcontent.= '// File generated to wrap the home page'."\n";
+        $indexcontent.= "include_once './".basename($filetpl)."'\n";
+        $indexcontent.= '?>'."\n";
+        $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
@@ -326,6 +346,8 @@ if ($action == 'updatemeta')
     $res = $objectpage->fetch($pageid, $object->fk_website);
     if ($res > 0)
     {
+        $oldobjectpage = clone $objectpage;
+        
         $objectpage->pageurl = GETPOST('WEBSITE_PAGENAME');
         $objectpage->title = GETPOST('WEBSITE_TITLE');
         $objectpage->description = GETPOST('WEBSITE_DESCRIPTION');
@@ -341,7 +363,61 @@ if ($action == 'updatemeta')
         if (! $error)
         {
             $db->commit();
-            setEventMessages($langs->trans("Saved"), null, 'mesgs');
+
+            $fileoldalias=$pathofwebsite.'/'.$oldobjectpage->pageurl.'.php';
+            $filealias=$pathofwebsite.'/'.$objectpage->pageurl.'.php';
+            
+            // Generate the alias.php page
+            //-----------------------------
+            dol_mkdir($pathofwebsite);
+            dol_delete_file($fileoldalias);
+            
+            $aliascontent = '<?php'."\n";
+            $aliascontent.= '// File generated to wrap the alias page'."\n";
+            $aliascontent.= "include_once './page".$objectpage->id.".tpl.php'\n";
+            $aliascontent.= '?>'."\n";
+            $result = file_put_contents($filealias, $aliascontent);
+            if (! empty($conf->global->MAIN_UMASK))
+                @chmod($filealias, octdec($conf->global->MAIN_UMASK));
+            
+            if ($result) setEventMessages($langs->trans("Saved"), null, 'mesgs');
+            else 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_mkdir($pathofwebsite);
+            dol_delete_file($filetpl);
+            
+            $tplcontent = '<html>'."\n";
+            $tplcontent.= '<header>'."\n";
+            $tplcontent.= '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'."\n";
+            $tplcontent.= '<meta name="robots" content="index, follow" />'."\n";
+            $tplcontent.= '<meta name="viewport" content="width=device-width, initial-scale=0.8">'."\n";
+            $tplcontent.= '<meta name="keywords" content="'.join(', ', explode(',',$objectpage->keywords)).'" />'."\n";
+            $tplcontent.= '<meta name="title" content="'.dol_escape_htmltag($objectpage->title).'" />'."\n";
+            $tplcontent.= '<meta name="description" content="'.dol_escape_htmltag($objectpage->description).'" />'."\n";
+            $tplcontent.= '<meta name="generator" content="'.DOL_APPLICATION_TITLE.'" />'."\n";
+            $tplcontent.= '<link rel="stylesheet" href="styles.css.php?website='.$website.'" type="text/css" />'."\n";
+            $tplcontent.= '<title>'.dol_escape_htmltag($objectpage->title).'</title>'."\n";
+            $tplcontent.= '</header>'."\n";
+            
+            $tplcontent.= '<body>'."\n";
+            $tplcontent.= $objectpage->content."\n";
+            $tplcontent.= '</body>'."\n";
+            //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 setEventMessages('Failed to write file '.$filetpl, null, 'errors');
+            
             $action='preview';
         }
         else
@@ -384,25 +460,38 @@ if ($action == 'updatecontent')
     		$db->commit();
     	    
     	    // Now create the .tpl file
+    	    // TODO Keep a one time generate file or include a dynamicaly generated content ? 
     	    dol_mkdir($pathofwebsite);
     	    dol_delete_file($filetpl);
 
     	    $tplcontent = '<html>'."\n";
     	    $tplcontent.= '<header>'."\n";
+    	    $tplcontent.= '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'."\n";
+    	    $tplcontent.= '<meta name="robots" content="index, follow" />'."\n";
+    	    $tplcontent.= '<meta name="viewport" content="width=device-width, initial-scale=0.8">'."\n";
+    	    $tplcontent.= '<meta name="keywords" content="'.join(', ', explode(',',$objectpage->keywords)).'" />'."\n";
+    	    $tplcontent.= '<meta name="title" content="'.dol_escape_htmltag($objectpage->title).'" />'."\n";
+    	    $tplcontent.= '<meta name="description" content="'.dol_escape_htmltag($objectpage->description).'" />'."\n";
+    	    $tplcontent.= '<meta name="generator" content="'.DOL_APPLICATION_TITLE.'" />'."\n";
     	    $tplcontent.= '<link rel="stylesheet" href="styles.css.php?website='.$website.'" type="text/css" />'."\n";
+    	    $tplcontent.= '<title>'.dol_escape_htmltag($objectpage->title).'</title>'."\n";
     	    $tplcontent.= '</header>'."\n";
+    	    	
     	    $tplcontent.= '<body>'."\n";
     	    $tplcontent.= $objectpage->content."\n";
     	    $tplcontent.= '</body>'."\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));
-    	        
-    	    setEventMessages($langs->trans("Saved"), null, 'mesgs');
-    	        
-    	    header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
-   	        exit;
+                 
+    	    if ($result)
+    	    {
+    	        setEventMessages($langs->trans("Saved"), null, 'mesgs');
+    	        header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
+   	            exit;
+    	    }
+    	    else setEventMessages('Failed to write file '.$filetpl, null, 'errors');    	        
     	}
     	else
     	{
-- 
GitLab