diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php
index f38406c3df5..4965d6cf759 100644
--- a/htdocs/admin/translation.php
+++ b/htdocs/admin/translation.php
@@ -215,20 +215,14 @@ if (empty($conf->global->MAIN_ENABLE_OVERWRITE_TRANSLATION))
{
// Button off, click to enable
$enabledisablehtml.='';
- //$enabledisablehtml.=img_picto($langs->trans("Disabled"),'switch_off');
- $enabledisablehtml.='';
- if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $enabledisablehtml.=$langs->trans("EnableOverwriteTranslation");
- $enabledisablehtml.='';
+ $enabledisablehtml.=img_picto($langs->trans("Disabled"),'switch_off');
$enabledisablehtml.='';
}
else
{
// Button on, click to disable
$enabledisablehtml.='';
- //$enabledisablehtml.=img_picto($langs->trans("Activated"),'switch_on');
- $enabledisablehtml.='';
- if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $enabledisablehtml.=$langs->trans("DisableOverwriteTranslation");
- $enabledisablehtml.='';
+ $enabledisablehtml.=img_picto($langs->trans("Activated"),'switch_on');
$enabledisablehtml.='';
}
diff --git a/htdocs/admin/websites.php b/htdocs/admin/website.php
similarity index 98%
rename from htdocs/admin/websites.php
rename to htdocs/admin/website.php
index 4f829db31df..2dc8a9f1423 100644
--- a/htdocs/admin/websites.php
+++ b/htdocs/admin/website.php
@@ -16,7 +16,7 @@
*/
/**
- * \file htdocs/admin/websites.php
+ * \file htdocs/admin/website.php
* \ingroup setup
* \brief Page to administer web sites
*/
@@ -28,7 +28,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
-require_once DOL_DOCUMENT_ROOT.'/websites/class/website.class.php';
+require_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
$langs->load("errors");
$langs->load("admin");
@@ -99,11 +99,11 @@ $tabrowid[1] = "";
// Condition to show dictionary in setup page
$tabcond=array();
-$tabcond[1] = (! empty($conf->websites->enabled));
+$tabcond[1] = (! empty($conf->website->enabled));
// List of help for fields
$tabhelp=array();
-$tabhelp[1] = array('ref'=>$langs->trans("EnterAnyCode"), 'virtualhost'=>$langs->trans("SetHereVirtualHost", DOL_DATA_ROOT.'/websites/websiteref'));
+$tabhelp[1] = array('ref'=>$langs->trans("EnterAnyCode"), 'virtualhost'=>$langs->trans("SetHereVirtualHost", DOL_DATA_ROOT.'/website/websiteref'));
// List of check for fields (NOT USED YET)
$tabfieldcheck=array();
@@ -205,7 +205,7 @@ if (GETPOST('actionadd','alpha') || GETPOST('actionmodify','alpha'))
if ($result) // Add is ok
{
global $dolibarr_main_data_root;
- $pathofwebsite=$dolibarr_main_data_root.'/websites/'.$websitekey;
+ $pathofwebsite=$dolibarr_main_data_root.'/website/'.$websitekey;
$filehtmlheader=$pathofwebsite.'/htmlheader.html';
$filecss=$pathofwebsite.'/styles.css.php';
$filetpl=$pathofwebsite.'/page'.$pageid.'.tpl.php';
@@ -283,8 +283,8 @@ if (GETPOST('actionadd','alpha') || GETPOST('actionmodify','alpha'))
$newname = dol_sanitizeFileName(GETPOST('ref','aZ09'));
if ($newname != $website->ref)
{
- $srcfile=DOL_DATA_ROOT.'/websites/'.$website->ref;
- $destfile=DOL_DATA_ROOT.'/websites/'.$newname;
+ $srcfile=DOL_DATA_ROOT.'/website/'.$website->ref;
+ $destfile=DOL_DATA_ROOT.'/website/'.$newname;
if (dol_is_dir($destfile))
{
diff --git a/htdocs/collab/index.php b/htdocs/collab/index.php
index bcc12c0a341..2c995543fdf 100644
--- a/htdocs/collab/index.php
+++ b/htdocs/collab/index.php
@@ -206,7 +206,7 @@ if (count($object->records) > 0)
if ($website)
{
$virtualurl='';
- $dataroot=DOL_DATA_ROOT.'/websites/'.$website;
+ $dataroot=DOL_DATA_ROOT.'/collab/'.$website;
if (! empty($object->virtualhost)) $virtualurl=$object->virtualhost;
}
@@ -238,7 +238,7 @@ if (count($object->records) > 0)
print '';
$urlext=$virtualurl;
- $urlint=$urlwithroot.'/public/websites/index.php?website='.$website;
+ $urlint=$urlwithroot.'/public/collab/index.php?website='.$website;
//if (! empty($object->virtualhost))
//{
print 'transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $dataroot, $urlext)).'">';
@@ -246,7 +246,7 @@ if (count($object->records) > 0)
print '';
//}
- print 'transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $urlint)).'">';
+ print 'transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $urlint)).'">';
print $form->textwithpicto('', $langs->trans("PreviewSiteServedByDolibarr", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $urlint, $dataroot), 1, 'preview');
print '';
}
@@ -347,7 +347,7 @@ if (count($object->records) > 0)
$websitepage = new WebSitePage($db);
$websitepage->fetch($pageid);
- $realpage=$urlwithroot.'/public/websites/index.php?website='.$website.'&page='.$pageid;
+ $realpage=$urlwithroot.'/public/collab/index.php?website='.$website.'&page='.$pageid;
$pagealias = $websitepage->pageurl;
print '
';
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index d824492d22c..b5043bf06d1 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -340,6 +340,15 @@ abstract class CommonObject
// No constructor as it is an abstract class
+ /**
+ * Return if an object manage the multicompany field and how.
+ *
+ * @return int 0=No entity field managed, 1=Test with field entity, 2=Test with link to thirdparty (and sales representative)
+ */
+ function getIsmultientitymanaged()
+ {
+ return $this->ismultientitymanaged;
+ }
/**
* Check an object id/ref exists
@@ -1338,16 +1347,16 @@ abstract class CommonObject
$sql = "SELECT MAX(te.".$fieldid.")";
$sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && empty($user->rights->societe->client->voir))) $sql.= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
$sql.= " WHERE te.".$fieldid." < '".$this->db->escape($this->ref)."'"; // ->ref must always be defined (set to id if field does not exists)
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
if (! empty($filter))
{
if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND "; // For backward compatibility
$sql.=$filter;
}
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN ('.getEntity($this->element, 1).')';
//print $filter.' '.$sql." ";
@@ -1363,16 +1372,16 @@ abstract class CommonObject
$sql = "SELECT MIN(te.".$fieldid.")";
$sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
$sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'"; // ->ref must always be defined (set to id if field does not exists)
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
if (! empty($filter))
{
if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND "; // For backward compatibility
$sql.=$filter;
}
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
+ if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN ('.getEntity($this->element, 1).')';
// Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
diff --git a/htdocs/core/class/emailsenderprofile.class.php b/htdocs/core/class/emailsenderprofile.class.php
index f211a0b1670..e792a4c3f0a 100644
--- a/htdocs/core/class/emailsenderprofile.class.php
+++ b/htdocs/core/class/emailsenderprofile.class.php
@@ -43,11 +43,6 @@ class EmailSenderProfile extends CommonObject
* @var string Name of table without prefix where object is stored
*/
public $table_element = 'c_email_senderprofile';
-
- /**
- * @var array Does this field is linked to a thirdparty ?
- */
- protected $isnolinkedbythird = 1;
/**
* @var array Does emailsenderprofile support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
*/
diff --git a/htdocs/core/filemanagerdol/connectors/php/config.php b/htdocs/core/filemanagerdol/connectors/php/config.php
index de8b4d7e8bf..8df350ef150 100644
--- a/htdocs/core/filemanagerdol/connectors/php/config.php
+++ b/htdocs/core/filemanagerdol/connectors/php/config.php
@@ -48,7 +48,7 @@ $Config['Enabled'] = true ;
$extEntity=(empty($entity) ? 1 : $entity); // For multicompany with external access
$Config['UserFilesPath'] = DOL_URL_ROOT.'/viewimage.php?modulepart=medias'.(empty($website)?'':'_'.$website).'&entity='.$extEntity.'&file=' ;
-$Config['UserFilesAbsolutePathRelative'] = (empty($website) ? ((!empty($entity) ? '/' . $entity : '') . '/medias/') : ('/websites/'.$website));
+$Config['UserFilesAbsolutePathRelative'] = (empty($website) ? ((!empty($entity) ? '/' . $entity : '') . '/medias/') : ('/website/'.$website));
// Fill the following value it you prefer to specify the absolute path for the
diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php
index b269a9c1e42..985b828886e 100644
--- a/htdocs/core/lib/company.lib.php
+++ b/htdocs/core/lib/company.lib.php
@@ -185,6 +185,34 @@ function societe_prepare_head(Societe $object)
$h++;
}
+ if (! empty($conf->website->enabled) && (!empty($user->rights->societe->lire) ))
+ {
+ $head[$h][0] = DOL_URL_ROOT.'/societe/website.php?id='.$object->id;
+ $head[$h][1] = $langs->trans("WebSites");
+ $nbNote = 0;
+ $sql = "SELECT COUNT(n.rowid) as nb";
+ $sql.= " FROM ".MAIN_DB_PREFIX."websiteaccount as n";
+ $sql.= " WHERE fk_soc = ".$object->id;
+ $resql=$db->query($sql);
+ if ($resql)
+ {
+ $num = $db->num_rows($resql);
+ $i = 0;
+ while ($i < $num)
+ {
+ $obj = $db->fetch_object($resql);
+ $nbNote=$obj->nb;
+ $i++;
+ }
+ }
+ else {
+ dol_print_error($db);
+ }
+ if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.'';
+ $head[$h][2] = 'website';
+ $h++;
+ }
+
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 538c6593ff3..09c39e8060a 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -2669,7 +2669,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo
*/
function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $srconly=0, $notitle=0)
{
- global $conf;
+ global $conf, $langs;
// Define fullpathpicto to use into src
if ($pictoisfullpath)
@@ -2680,6 +2680,23 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
}
else
{
+ if ($picto == 'switch_off')
+ {
+ $enabledisablehtml='';
+ $enabledisablehtml.='';
+ if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $enabledisablehtml.=$langs->trans("EnableOverwriteTranslation");
+ $enabledisablehtml.='';
+ return $enabledisablehtml;
+ }
+ if ($picto == 'switch_on')
+ {
+ $enabledisablehtml='';
+ $enabledisablehtml.='';
+ if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $enabledisablehtml.=$langs->trans("DisableOverwriteTranslation");
+ $enabledisablehtml.='';
+ return $enabledisablehtml;
+ }
+
// We forge fullpathpicto for image to $path/img/$picto. By default, we take DOL_URL_ROOT/theme/$conf->theme/img/$picto
$url = DOL_URL_ROOT;
$theme = $conf->theme;
diff --git a/htdocs/core/lib/modulebuilder.lib.php b/htdocs/core/lib/modulebuilder.lib.php
index 23d6597b227..28cd88e6a7e 100644
--- a/htdocs/core/lib/modulebuilder.lib.php
+++ b/htdocs/core/lib/modulebuilder.lib.php
@@ -254,6 +254,15 @@ function rebuildObjectSql($destdir, $module, $objectname, $newmask, $readdir='',
$texttoinsert.= "\t".$key." ".$val['type'];
if ($key == 'rowid') $texttoinsert.= ' AUTO_INCREMENT PRIMARY KEY';
if ($key == 'entity') $texttoinsert.= ' DEFAULT 1';
+ else
+ {
+ if ($val['default'] != '')
+ {
+ if (preg_match('/^null$/i', $val['default'])) $texttoinsert.= " DEFAULT NULL";
+ else if (preg_match('/varchar/', $val['type'])) $texttoinsert.= " DEFAULT '".$db->escape($val['default'])."'";
+ else $texttoinsert.= (($val['default'] > 0)?' DEFAULT '.$val['default']:'');
+ }
+ }
$texttoinsert.= (($val['notnull'] > 0)?' NOT NULL':'');
if ($i < count($object->fields)) $texttoinsert.=", ";
$texttoinsert.= "\n";
diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php
index 806d5d7a640..e372229de54 100644
--- a/htdocs/core/lib/website.lib.php
+++ b/htdocs/core/lib/website.lib.php
@@ -68,9 +68,9 @@ function dolWebsiteOutput($content)
global $website;
// Replace relative link / with dolibarr URL: ...href="/"...
- $content=preg_replace('/(href=")\/\"/', '\1'.DOL_URL_ROOT.'/public/websites/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep);
+ $content=preg_replace('/(href=")\/\"/', '\1'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep);
// Replace relative link /xxx.php with dolibarr URL: ...href="....php"
- $content=preg_replace('/(href=")\/?([^\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/public/websites/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep);
+ $content=preg_replace('/(href=")\/?([^\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep);
// Fix relative link /document.php with correct URL after the DOL_URL_ROOT: ...href="/document.php?modulepart="
$content=preg_replace('/(href=")(\/?document\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3"', $content, -1, $nbrep);
@@ -101,9 +101,9 @@ function dolWebsiteReplacementOfLinks($website, $content)
$content = preg_replace('/<\?php[^\?]+\?>\n*/ims', '...php...', $content);
// Replace relative link / with dolibarr URL
- $content = preg_replace('/(href=")\/\"/', '\1'.DOL_URL_ROOT.'/websites/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep);
+ $content = preg_replace('/(href=")\/\"/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep);
// Replace relative link /xxx.php with dolibarr URL
- $content = preg_replace('/(href=")\/?([^\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/websites/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep);
+ $content = preg_replace('/(href=")\/?([^\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep);
$content = preg_replace('/url\((["\']?)medias\//', 'url(\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
diff --git a/htdocs/core/modules/modWebsites.class.php b/htdocs/core/modules/modWebsite.class.php
similarity index 80%
rename from htdocs/core/modules/modWebsites.class.php
rename to htdocs/core/modules/modWebsite.class.php
index 2259a91e15a..47d44d66164 100644
--- a/htdocs/core/modules/modWebsites.class.php
+++ b/htdocs/core/modules/modWebsite.class.php
@@ -16,11 +16,11 @@
*/
/**
- * \defgroup websites Module websites
- * \brief Websites module descriptor.
- * \file htdocs/core/modules/modWebsites.class.php
+ * \defgroup website Module website
+ * \brief website module descriptor.
+ * \file htdocs/core/modules/modWebsite.class.php
* \ingroup websites
- * \brief Description and activation file for module Websites
+ * \brief Description and activation file for module Website
*/
include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
@@ -28,7 +28,7 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
/**
* Class to describe Websites module
*/
-class modWebsites extends DolibarrModules
+class modWebsite extends DolibarrModules
{
/**
@@ -49,7 +49,7 @@ class modWebsites extends DolibarrModules
$this->module_position = 50;
// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
$this->name = preg_replace('/^mod/i','',get_class($this));
- $this->description = "Enable to build and serve public websites with CMS features";
+ $this->description = "Enable to build and serve public web sites with CMS features";
// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
$this->version = 'experimental';
// Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
@@ -60,11 +60,11 @@ class modWebsites extends DolibarrModules
$this->picto='globe';
// Data directories to create when module is enabled
- $this->dirs = array("/websites/temp");
+ $this->dirs = array("/website/temp");
// Config pages
//-------------
- $this->config_page_url = array('websites.php');
+ $this->config_page_url = array('website.php');
// Dependancies
//-------------
@@ -80,7 +80,7 @@ class modWebsites extends DolibarrModules
// New pages on tabs
// -----------------
- $this->tabs[] = array('data'=>'thirdparty:+websites:WebSites:website:$user->rights->websites->read:/societe/website.php?mainmenu=home&id=__ID__'); // To add a new tab identified by code tabname1
+ //$this->tabs[] = array('data'=>'thirdparty:+website:WebSites:website:($conf->societe->enabled && $user->rights->societe->lire):/societe/website.php?mainmenu=home&id=__ID__'); // To add a new tab identified by code tabname1
// Boxes
//------
@@ -88,7 +88,7 @@ class modWebsites extends DolibarrModules
// Permissions
$this->rights = array(); // Permission array used by this module
- $this->rights_class = 'websites';
+ $this->rights_class = 'website';
$r=0;
$this->rights[$r][0] = 10001;
@@ -114,12 +114,12 @@ class modWebsites extends DolibarrModules
$this->menu[$r]=array( 'fk_menu'=>'0', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'type'=>'top', // This is a Left menu entry
'titre'=>'Websites',
- 'mainmenu'=>'websites',
- 'url'=>'/websites/index.php',
- 'langs'=>'websites', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
+ 'mainmenu'=>'website',
+ 'url'=>'/website/index.php',
+ 'langs'=>'website', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position'=>100,
- 'enabled'=>'$conf->websites->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
- 'perms'=>'$user->rights->websites->read', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
+ 'enabled'=>'$conf->website->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
+ 'perms'=>'$user->rights->website->read', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
'target'=>'',
'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
$r++;
@@ -130,7 +130,7 @@ class modWebsites extends DolibarrModules
$this->export_code[$r]=$this->rights_class.'_'.$r;
$this->export_label[$r]='MyWebsitePages'; // Translation key (used only if key ExportDataset_xxx_z not found)
$this->export_icon[$r]='globe';
- $keyforclass = 'WebsitePage'; $keyforclassfile='/websites/class/websitepage.class.php'; $keyforelement='Website';
+ $keyforclass = 'WebsitePage'; $keyforclassfile='/website/class/websitepage.class.php'; $keyforelement='Website';
include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
//$keyforselect='myobject'; $keyforelement='myobject'; $keyforaliasextra='extra';
//include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
diff --git a/htdocs/core/website.inc.php b/htdocs/core/website.inc.php
index 65db787734a..46b1f955177 100644
--- a/htdocs/core/website.inc.php
+++ b/htdocs/core/website.inc.php
@@ -23,6 +23,6 @@
*/
-include_once DOL_DOCUMENT_ROOT.'/websites/class/website.class.php';
+include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
$website=new Website($db);
$website->fetch(0,$websitekey);
diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php
index ba976c2ee48..8fe8a14430a 100644
--- a/htdocs/holiday/class/holiday.class.php
+++ b/htdocs/holiday/class/holiday.class.php
@@ -34,7 +34,6 @@ class Holiday extends CommonObject
{
public $element='holiday';
public $table_element='holiday';
- protected $isnolinkedbythird = 1; // No field fk_soc
protected $ismultientitymanaged = 0; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
public $picto = 'holiday';
diff --git a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql
index e21bebac13f..800b1b1c06c 100644
--- a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql
+++ b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql
@@ -168,6 +168,42 @@ ALTER TABLE llx_accounting_bookkeeping ADD COLUMN extraparams varchar(255);
ALTER TABLE llx_accounting_bookkeeping ADD COLUMN date_lim_reglement datetime;
ALTER TABLE llx_accounting_bookkeeping ADD COLUMN fk_user integer NULL;
+
+CREATE TABLE llx_websiteaccount(
+ rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
+ login varchar(64) NOT NULL,
+ label varchar(255),
+ note_public text,
+ note_private text,
+ date_creation datetime NOT NULL,
+ tms timestamp NOT NULL,
+ fk_user_creat integer NOT NULL,
+ fk_user_modif integer,
+ import_key varchar(14),
+ status integer,
+ fk_soc integer
+) ENGINE=innodb;
+
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_rowid (rowid);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_login (login);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_import_key (import_key);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_status (status);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_fk_soc (fk_soc);
+
+create table llx_websiteaccount_extrafields
+(
+ rowid integer AUTO_INCREMENT PRIMARY KEY,
+ tms timestamp,
+ fk_object integer NOT NULL,
+ import_key varchar(14) -- import key
+) ENGINE=innodb;
+
+
+
+
+
+
+
CREATE TABLE IF NOT EXISTS llx_expensereport_ik (
rowid integer AUTO_INCREMENT PRIMARY KEY,
datec datetime DEFAULT NULL,
@@ -396,3 +432,7 @@ create table llx_c_email_senderprofile
)ENGINE=innodb;
ALTER TABLE llx_c_email_senderprofile ADD UNIQUE INDEX uk_c_email_senderprofile(entity, label, email);
+
+
+-- May have error due to duplicate keys
+ALTER TABLE llx_resource ADD UNIQUE INDEX uk_resource_ref (ref, entity);
diff --git a/htdocs/install/mysql/tables/llx_resource.key.sql b/htdocs/install/mysql/tables/llx_resource.key.sql
index 62eb21056c4..4912b02b1f9 100644
--- a/htdocs/install/mysql/tables/llx_resource.key.sql
+++ b/htdocs/install/mysql/tables/llx_resource.key.sql
@@ -15,4 +15,6 @@
-- along with this program. If not, see .
+ALTER TABLE llx_resource ADD UNIQUE INDEX uk_resource_ref (ref, entity);
+
ALTER TABLE llx_resource ADD INDEX fk_code_type_resource_idx (fk_code_type_resource);
\ No newline at end of file
diff --git a/htdocs/install/mysql/tables/llx_websiteaccount.key.sql b/htdocs/install/mysql/tables/llx_websiteaccount.key.sql
new file mode 100644
index 00000000000..1ebab80b361
--- /dev/null
+++ b/htdocs/install/mysql/tables/llx_websiteaccount.key.sql
@@ -0,0 +1,26 @@
+-- Copyright (C) 2016 Laurent Destailleur
+--
+-- 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/.
+
+
+-- BEGIN MODULEBUILDER INDEXES
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_rowid (rowid);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_login (login);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_import_key (import_key);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_status (status);
+ALTER TABLE llx_websiteaccount ADD INDEX idx_websiteaccount_fk_soc (fk_soc);
+-- END MODULEBUILDER INDEXES
+
+--ALTER TABLE llx_websiteaccount ADD CONSTRAINT llx_websiteaccount_field_id FOREIGN KEY (fk_field) REFERENCES llx_myotherobject(rowid);
+
diff --git a/htdocs/install/mysql/tables/llx_websiteaccount.sql b/htdocs/install/mysql/tables/llx_websiteaccount.sql
new file mode 100644
index 00000000000..7fb846cd2f3
--- /dev/null
+++ b/htdocs/install/mysql/tables/llx_websiteaccount.sql
@@ -0,0 +1,32 @@
+-- Copyright (C) 2016 Laurent Destailleur
+--
+-- 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/.
+
+
+CREATE TABLE llx_websiteaccount(
+ -- BEGIN MODULEBUILDER FIELDS
+ rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
+ login varchar(64) NOT NULL,
+ label varchar(255),
+ note_public text,
+ note_private text,
+ date_creation datetime NOT NULL,
+ tms timestamp NOT NULL,
+ fk_user_creat integer NOT NULL,
+ fk_user_modif integer,
+ import_key varchar(14),
+ status integer,
+ fk_soc integer
+ -- END MODULEBUILDER FIELDS
+) ENGINE=innodb;
\ No newline at end of file
diff --git a/htdocs/install/mysql/tables/llx_websiteaccount_extrafields.sql b/htdocs/install/mysql/tables/llx_websiteaccount_extrafields.sql
new file mode 100644
index 00000000000..fd4d4e3653f
--- /dev/null
+++ b/htdocs/install/mysql/tables/llx_websiteaccount_extrafields.sql
@@ -0,0 +1,23 @@
+-- Copyright (C) 2016 Laurent Destailleur
+--
+-- 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/.
+
+create table llx_websiteaccount_extrafields
+(
+ rowid integer AUTO_INCREMENT PRIMARY KEY,
+ tms timestamp,
+ fk_object integer NOT NULL,
+ import_key varchar(14) -- import key
+) ENGINE=innodb;
+
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 7756f5cc3e5..e3e96b0c735 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -592,7 +592,7 @@ Module5000Desc=Allows you to manage multiple companies
Module6000Name=Workflow
Module6000Desc=Workflow management
Module10000Name=Websites
-Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server to point to the dedicated directory to have it online on the Internet.
+Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
Module20000Name=Leave Requests management
Module20000Desc=Declare and follow employees leaves requests
Module39000Name=Product lot
@@ -1129,7 +1129,7 @@ SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail dire
TranslationSetup=Setup of translation
TranslationKeySearch=Search a translation key or string
TranslationOverwriteKey=Overwrite a translation string
-TranslationDesc=How to set displayed application language : * Systemwide: menu Home - Setup - Display * Per user: User display setup tab of user card (click on username at the top of the screen).
+TranslationDesc=How to set displayed application language : * Systemwide: menu Home - Setup - Display * Per user: Use the User display setup tab on user card (click on username at the top of the screen).
TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
TranslationString=Translation string
diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang
index 1ec51989ee6..75a0e16c0ba 100644
--- a/htdocs/langs/en_US/modulebuilder.lang
+++ b/htdocs/langs/en_US/modulebuilder.lang
@@ -47,6 +47,7 @@ SpecificationFile=File with business rules
LanguageFile=File for language
ConfirmDeleteProperty=Are you sure you want to delete the property %s ? This will change code in PHP class but also remove column from table definition of object.
NotNull=Not NULL
+NotNullDesc=1=Set database to NOT NULL. -1=Allow null values and force value to NULL if empty ('' or 0).
SearchAll=Used for 'search all'
DatabaseIndex=Database index
FileAlreadyExists=File %s already exists
diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang
index 847a2cb4647..043fcb52472 100644
--- a/htdocs/langs/en_US/website.lang
+++ b/htdocs/langs/en_US/website.lang
@@ -51,4 +51,5 @@ OrEnterPageInfoManually=Or create empty page from scratch...
FetchAndCreate=Fetch and Create
ExportSite=Export site
IDOfPage=Id of page
-WebsiteAccounts=Web sites accounts
\ No newline at end of file
+WebsiteAccounts=Web site accounts
+AddWebsiteAccount=Create web site account
\ No newline at end of file
diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php
index 40a69851a0e..d128b9df5b9 100644
--- a/htdocs/modulebuilder/index.php
+++ b/htdocs/modulebuilder/index.php
@@ -1529,7 +1529,7 @@ elseif (! empty($module))
{
$reflector = new ReflectionClass($tabobj);
$properties = $reflector->getProperties(); // Can also use get_object_vars
- $propdefault = $reflector->getDefaultProperties(); // Can also use get_object_vars
+ //$propdefault = $reflector->getDefaultProperties(); // Can also use get_object_vars
//$propstat = $reflector->getStaticProperties();
print load_fiche_titre($langs->trans("Properties"), '', '');
@@ -1553,8 +1553,8 @@ elseif (! empty($module))
print '';
print '
';
}
}
diff --git a/htdocs/resource/class/dolresource.class.php b/htdocs/resource/class/dolresource.class.php
index 6dc093f6142..10c7c2f9f85 100644
--- a/htdocs/resource/class/dolresource.class.php
+++ b/htdocs/resource/class/dolresource.class.php
@@ -169,10 +169,11 @@ class Dolresource extends CommonObject
/**
* Load object in memory from database
*
- * @param int $id id object
- * @return int <0 if KO, >0 if OK
+ * @param int $id Id of object
+ * @param string $ref Ref of object
+ * @return int <0 if KO, >0 if OK
*/
- function fetch($id)
+ function fetch($id, $ref='')
{
global $langs;
$sql = "SELECT";
@@ -187,7 +188,8 @@ class Dolresource extends CommonObject
$sql.= " ty.label as type_label";
$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as t";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_type_resource as ty ON ty.code=t.fk_code_type_resource";
- $sql.= " WHERE t.rowid = ".$this->db->escape($id);
+ if ($id) $sql.= " WHERE t.rowid = ".$this->db->escape($id);
+ else $sql.= " WHERE t.ref = '".$this->db->escape($ref)."'";
dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
$resql=$this->db->query($sql);
@@ -751,75 +753,6 @@ class Dolresource extends CommonObject
return 0;
}
- /**
- * Load properties id_previous and id_next
- *
- * @param string $filter Optional filter
- * @param int $fieldid Name of field to use for the select MAX and MIN
- * @param int $nodbprefix Do not include DB prefix to forge table name
- * @return int <0 if KO, >0 if OK
- */
- function load_previous_next_ref($filter, $fieldid, $nodbprefix =0)
- {
- global $conf, $user;
-
- if (! $this->table_element)
- {
- dol_print_error('',get_class($this)."::load_previous_next_ref was called on objet with property table_element not defined");
- return -1;
- }
-
- // this->ismultientitymanaged contains
- // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
- $alias = 's';
-
-
- $sql = "SELECT MAX(te.".$fieldid.")";
- $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as te";
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && empty($user->rights->societe->client->voir))) $sql.= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
- $sql.= " WHERE te.".$fieldid." < '".$this->db->escape($this->id)."'";
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
- if (! empty($filter)) $sql.=" AND ".$filter;
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN ('.getEntity($this->element, 1).')';
-
- //print $sql." ";
- $result = $this->db->query($sql);
- if (! $result)
- {
- $this->error=$this->db->error();
- return -1;
- }
- $row = $this->db->fetch_row($result);
- $this->ref_previous = $row[0];
-
-
- $sql = "SELECT MIN(te.".$fieldid.")";
- $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as te";
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
- $sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->id)."'";
- if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
- if (! empty($filter)) $sql.=" AND ".$filter;
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
- if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN ('.getEntity($this->element, 1).')';
- // Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
-
- //print $sql." ";
- $result = $this->db->query($sql);
- if (! $result)
- {
- $this->error=$this->db->error();
- return -2;
- }
- $row = $this->db->fetch_row($result);
- $this->ref_next = $row[0];
-
- return 1;
- }
-
-
/**
* Update element resource into database
*
diff --git a/htdocs/resource/contact.php b/htdocs/resource/contact.php
index 007ecd8025d..543e69b83ef 100644
--- a/htdocs/resource/contact.php
+++ b/htdocs/resource/contact.php
@@ -36,7 +36,7 @@ $langs->load("sendings");
$langs->load("companies");
$id = GETPOST('id','int');
-$ref = GETPOST('ref', 'alpha');
+$ref = GETPOST('ref','alpha');
$action = GETPOST('action','alpha');
// Security check
@@ -123,19 +123,19 @@ if ($id > 0 || ! empty($ref))
$linkback = '' . $langs->trans("BackToList") . '';
-
-
+
+
$morehtmlref='
';
-
- dol_fiche_end();
+print ' ';
- $morehtmlcenter='';
- if (! empty($conf->website->enabled))
+// Build and execute select
+// --------------------------------------------------------------------
+$sql = 'SELECT ';
+foreach($objectwebsiteaccount->fields as $key => $val)
+{
+ $sql.='t.'.$key.', ';
+}
+// Add fields from extrafields
+foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ", ef.".$key.' as options_'.$key : '');
+// Add fields from hooks
+$parameters=array();
+$reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $objectwebsiteaccount); // Note that $action and $object may have been modified by hook
+$sql.=$hookmanager->resPrint;
+$sql=preg_replace('/, $/','', $sql);
+$sql.= " FROM ".MAIN_DB_PREFIX."websiteaccount as t";
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."websiteaccount_extrafields as ef on (t.rowid = ef.fk_object)";
+if ($objectwebsiteaccount->getIsmultientitymanaged() == 1) $sql.= " WHERE t.entity IN (".getEntity('websiteaccount').")";
+else $sql.=" WHERE 1 = 1";
+foreach($search as $key => $val)
+{
+ $mode_search=(($objectwebsiteaccount->isInt($objectwebsiteaccount->fields[$key]) || $objectwebsiteaccount->isFloat($objectwebsiteaccount->fields[$key]))?1:0);
+ if ($search[$key] != '') $sql.=natural_search($key, $search[$key], (($key == 'status')?2:$mode_search));
+}
+if ($search_all) $sql.= natural_search(array_keys($fieldstosearchall), $search_all);
+// Add where from extra fields
+foreach ($search_array_options as $key => $val)
+{
+ $crit=$val;
+ $tmpkey=preg_replace('/search_options_/','',$key);
+ $typ=$extrafields->attribute_type[$tmpkey];
+ $mode_search=0;
+ if (in_array($typ, array('int','double','real'))) $mode_search=1; // Search on a numeric
+ if (in_array($typ, array('sellist')) && $crit != '0' && $crit != '-1') $mode_search=2; // Search on a foreign key int
+ if ($crit != '' && (! in_array($typ, array('select','sellist')) || $crit != '0'))
{
- if (! empty($user->rights->societe->lire))
+ $sql .= natural_search('ef.'.$tmpkey, $crit, $mode_search);
+ }
+}
+// Add where from hooks
+$parameters=array();
+$reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters, $objectwebsiteaccount); // Note that $action and $objectwebsiteaccount may have been modified by hook
+$sql.=$hookmanager->resPrint;
+
+/* If a group by is required
+ $sql.= " GROUP BY "
+ foreach($objectwebsiteaccount->fields as $key => $val)
+ {
+ $sql.='t.'.$key.', ';
+ }
+ // Add fields from extrafields
+ foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key : '');
+ // Add where from hooks
+ $parameters=array();
+ $reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters); // Note that $action and $objectwebsiteaccount may have been modified by hook
+ $sql.=$hookmanager->resPrint;
+ */
+
+$sql.=$db->order($sortfield,$sortorder);
+
+// Count total nb of records
+$nbtotalofrecords = '';
+if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
+{
+ $result = $db->query($sql);
+ $nbtotalofrecords = $db->num_rows($result);
+}
+
+$sql.= $db->plimit($limit+1, $offset);
+
+$resql=$db->query($sql);
+if (! $resql)
+{
+ dol_print_error($db);
+ exit;
+}
+
+$num = $db->num_rows($resql);
+
+$arrayofselected=is_array($toselect)?$toselect:array();
+
+// List of mass actions available
+$arrayofmassactions = array(
+//'presend'=>$langs->trans("SendByMail"),
+//'builddoc'=>$langs->trans("PDFMerge"),
+);
+if ($user->rights->mymodule->delete) $arrayofmassactions['delete']=$langs->trans("Delete");
+if ($massaction == 'presend') $arrayofmassactions=array();
+$massactionbutton=$form->selectMassAction('', $arrayofmassactions);
+
+print ''."\n";
+
+if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords))
+{
+ if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files)
+ {
+ require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
+ $formfile = new FormFile($db);
+
+ // Show list of available documents
+ $urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
+ $urlsource.=str_replace('&','&',$param);
+
+ $filedir=$diroutputmassaction;
+ $genallowed=$user->rights->mymodule->read;
+ $delallowed=$user->rights->mymodule->create;
+
+ print $formfile->showdocuments('massfilesarea_mymodule','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'');
+ }
+ else
+ {
+ print ' '.$langs->trans("ShowTempMassFilesArea").'';
+ }
+}
+
llxFooter();
diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php
index fbdb612e398..d5489a432db 100644
--- a/htdocs/theme/eldy/style.css.php
+++ b/htdocs/theme/eldy/style.css.php
@@ -1566,7 +1566,7 @@ div.mainmenu.tools {
background-image: url();
}
-div.mainmenu.websites {
+div.mainmenu.website {
background-image: url();
}
@@ -1752,8 +1752,8 @@ table.login_table_securitycode tr td {
div.login_block {
position: absolute;
text-align: ;
- : 5px;
- top: 4px;
+ : 0;
+ top: 0;
font-weight: bold;
max-width: px;
@@ -1780,6 +1780,7 @@ div.login a:hover {
}
div.login_block_user {
display: inline-block;
+ padding-top: 3px;
global->THEME_TOPMENU_DISABLE_IMAGE)) { ?>
min-width: 120px;
@@ -4901,16 +4902,17 @@ div.tabsElem a.tab {
padding-right: 20px;
padding-bottom: 16px;
- padding-top: 10px;
+ padding-top: 5px;
padding-left: 5px;
padding-right: 5px;
+ padding-bottom: 5px;
top: inherit !important;
left: 0 !important;
text-align: center;
vertical-align: middle;
background: #FFF;
- height: 42px;
+ height: 50px;
z-index: 202;
min-width: 190px;
diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php
index eae1a07a87b..99fdd6cd727 100644
--- a/htdocs/theme/md/style.css.php
+++ b/htdocs/theme/md/style.css.php
@@ -1602,7 +1602,7 @@ div.mainmenu.tools {
background-image: url();
}
-div.mainmenu.websites {
+div.mainmenu.website {
background-image: url();
}
diff --git a/htdocs/websites/class/website.class.php b/htdocs/website/class/website.class.php
similarity index 98%
rename from htdocs/websites/class/website.class.php
rename to htdocs/website/class/website.class.php
index 8083407bdda..eebe072601b 100644
--- a/htdocs/websites/class/website.class.php
+++ b/htdocs/website/class/website.class.php
@@ -20,8 +20,8 @@
*/
/**
- * \file websites/website.class.php
- * \ingroup websites
+ * \file website/website.class.php
+ * \ingroup website
* \brief File for the CRUD class of website (Create/Read/Update/Delete)
*/
@@ -509,8 +509,8 @@ class Website extends CommonObject
$oldidforhome=$object->fk_default_home;
- $pathofwebsiteold=$dolibarr_main_data_root.'/websites/'.$object->ref;
- $pathofwebsitenew=$dolibarr_main_data_root.'/websites/'.$newref;
+ $pathofwebsiteold=$dolibarr_main_data_root.'/website/'.$object->ref;
+ $pathofwebsitenew=$dolibarr_main_data_root.'/website/'.$newref;
dol_delete_dir_recursive($pathofwebsitenew);
$fileindex=$pathofwebsitenew.'/index.php';
@@ -652,7 +652,7 @@ class Website extends CommonObject
$label.= '
';
$label.= '' . $langs->trans('Ref') . ': ' . $this->ref;
- $link = '';
$linkend='';
diff --git a/htdocs/website/class/websiteaccount.class.php b/htdocs/website/class/websiteaccount.class.php
new file mode 100644
index 00000000000..267eae9ac57
--- /dev/null
+++ b/htdocs/website/class/websiteaccount.class.php
@@ -0,0 +1,491 @@
+
+ * Copyright (C) 2014-2016 Juanjo Menent
+ * Copyright (C) 2015 Florian Henry
+ * Copyright (C) 2015 Raphaƫl Doursenaud
+ * Copyright (C) ---Put here your own copyright and developer email---
+ *
+ * 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 .
+ */
+
+/**
+ * \file class/websiteaccount.class.php
+ * \ingroup website
+ * \brief This file is a CRUD class file for WebsiteAccount (Create/Read/Update/Delete)
+ */
+
+// Put here all includes required by your class file
+require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
+//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
+//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
+
+/**
+ * Class for WebsiteAccount
+ */
+class WebsiteAccount extends CommonObject
+{
+ /**
+ * @var string ID to identify managed object
+ */
+ public $element = 'websiteaccount';
+ /**
+ * @var string Name of table without prefix where object is stored
+ */
+ public $table_element = 'websiteaccount';
+
+ /**
+ * @var array Does websiteaccount support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
+ */
+ protected $ismultientitymanaged = 0;
+
+ /**
+ * @var string String with name of icon for websiteaccount
+ */
+ public $picto = 'object_globe';
+
+
+ /**
+ * 'type' if the field format.
+ * 'label' the translation key.
+ * 'enabled' is a condition when the filed must be managed.
+ * 'visible' says if field is visible in list (-1 means not shown by default but can be added into list to be viewed).
+ * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
+ * 'index' if we want an index in database.
+ * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...).
+ * 'position' is the sort order of field.
+ * 'searchall' is 1 if we want to search in this field when making a search from the quick search button.
+ * 'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8).
+ * 'help' is a string visible as a tooltip on field
+ * 'comment' is not used. You can store here any text of your choice.
+ */
+
+ // BEGIN MODULEBUILDER PROPERTIES
+ /**
+ * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
+ */
+ public $fields=array(
+ 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-1, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',),
+ 'login' => array('type'=>'varchar(64)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Login',),
+ 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1,),
+ 'note_public' => array('type'=>'text', 'label'=>'NotePublic', 'visible'=>-1, 'enabled'=>1, 'position'=>45, 'notnull'=>-1,),
+ 'note_private' => array('type'=>'text', 'label'=>'NotePrivate', 'visible'=>-1, 'enabled'=>1, 'position'=>46, 'notnull'=>-1,),
+ 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'visible'=>-1, 'enabled'=>1, 'position'=>500, 'notnull'=>1,),
+ 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'visible'=>-1, 'enabled'=>1, 'position'=>500, 'notnull'=>1,),
+ 'fk_user_creat' => array('type'=>'integer', 'label'=>'UserAuthor', 'visible'=>-1, 'enabled'=>1, 'position'=>500, 'notnull'=>1,),
+ 'fk_user_modif' => array('type'=>'integer', 'label'=>'UserModif', 'visible'=>-1, 'enabled'=>1, 'position'=>500, 'notnull'=>-1,),
+ 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'visible'=>-1, 'enabled'=>1, 'position'=>1000, 'notnull'=>-1, 'index'=>1,),
+ 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'notnull'=>-1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Disabled', '1'=>'Active')),
+ 'fk_soc' => array('type'=>'integer', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'searchall'=>1,),
+ );
+ public $rowid;
+ public $login;
+ public $label;
+ public $note_public;
+ public $note_private;
+ public $date_creation;
+ public $tms;
+ public $fk_user_creat;
+ public $fk_user_modif;
+ public $import_key;
+ public $status;
+ public $fk_soc;
+ // END MODULEBUILDER PROPERTIES
+
+
+
+ // If this object has a subtable with lines
+
+ /**
+ * @var int Name of subtable line
+ */
+ //public $table_element_line = 'websiteaccountdet';
+ /**
+ * @var int Field with ID of parent key if this field has a parent
+ */
+ //public $fk_element = 'fk_websiteaccount';
+ /**
+ * @var int Name of subtable class that manage subtable lines
+ */
+ //public $class_element_line = 'WebsiteAccountline';
+ /**
+ * @var array Array of child tables (child tables to delete before deleting a record)
+ */
+ //protected $childtables=array('websiteaccountdet');
+ /**
+ * @var WebsiteAccountLine[] Array of subtable lines
+ */
+ //public $lines = array();
+
+
+
+ /**
+ * Constructor
+ *
+ * @param DoliDb $db Database handler
+ */
+ public function __construct(DoliDB $db)
+ {
+ global $conf;
+
+ $this->db = $db;
+
+ if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) $this->fields['rowid']['visible']=0;
+ }
+
+ /**
+ * Create object into database
+ *
+ * @param User $user User that creates
+ * @param bool $notrigger false=launch triggers after, true=disable triggers
+ * @return int <0 if KO, Id of created object if OK
+ */
+ public function create(User $user, $notrigger = false)
+ {
+ return $this->createCommon($user, $notrigger);
+ }
+
+ /**
+ * Clone and object into another one
+ *
+ * @param User $user User that creates
+ * @param int $fromid Id of object to clone
+ * @return mixed New object created, <0 if KO
+ */
+ public function createFromClone(User $user, $fromid)
+ {
+ global $hookmanager, $langs;
+ $error = 0;
+
+ dol_syslog(__METHOD__, LOG_DEBUG);
+
+ $object = new self($this->db);
+
+ $this->db->begin();
+
+ // Load source object
+ $object->fetchCommon($fromid);
+ // Reset some properties
+ unset($object->id);
+ unset($object->fk_user_creat);
+ unset($object->import_key);
+
+ // Clear fields
+ $object->ref = "copy_of_".$object->ref;
+ $object->title = $langs->trans("CopyOf")." ".$object->title;
+ // ...
+
+ // Create clone
+ $object->context['createfromclone'] = 'createfromclone';
+ $result = $object->createCommon($user);
+ if ($result < 0) {
+ $error++;
+ $this->error = $object->error;
+ $this->errors = $object->errors;
+ }
+
+ // End
+ if (!$error) {
+ $this->db->commit();
+ return $object;
+ } else {
+ $this->db->rollback();
+ return -1;
+ }
+ }
+
+ /**
+ * Load object in memory from the database
+ *
+ * @param int $id Id object
+ * @param string $ref Ref
+ * @return int <0 if KO, 0 if not found, >0 if OK
+ */
+ public function fetch($id, $ref = null)
+ {
+ $result = $this->fetchCommon($id, $ref);
+ if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines();
+ return $result;
+ }
+
+ /**
+ * Load object lines in memory from the database
+ *
+ * @return int <0 if KO, 0 if not found, >0 if OK
+ */
+ public function fetchLines()
+ {
+ $this->lines=array();
+
+ // Load lines with object WebsiteAccountLine
+
+ return count($this->lines)?1:0;
+ }
+
+ /**
+ * Update object into database
+ *
+ * @param User $user User that modifies
+ * @param bool $notrigger false=launch triggers after, true=disable triggers
+ * @return int <0 if KO, >0 if OK
+ */
+ public function update(User $user, $notrigger = false)
+ {
+ return $this->updateCommon($user, $notrigger);
+ }
+
+ /**
+ * Delete object in database
+ *
+ * @param User $user User that deletes
+ * @param bool $notrigger false=launch triggers after, true=disable triggers
+ * @return int <0 if KO, >0 if OK
+ */
+ public function delete(User $user, $notrigger = false)
+ {
+ return $this->deleteCommon($user, $notrigger);
+ }
+
+ /**
+ * Return a link to the object card (with optionaly the picto)
+ *
+ * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto)
+ * @param string $option On what the link point to ('nolink', ...)
+ * @param int $notooltip 1=Disable tooltip
+ * @param string $morecss Add more css on link
+ * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
+ * @return string String with URL
+ */
+ function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
+ {
+ global $db, $conf, $langs;
+ global $dolibarr_main_authentication, $dolibarr_main_demo;
+ global $menumanager;
+
+ if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips
+
+ $result = '';
+ $companylink = '';
+
+ $label = '' . $langs->trans("WebsiteAccount") . '';
+ $label.= ' ';
+ $label.= '' . $langs->trans('Ref') . ': ' . $this->ref;
+
+ $url = dol_buildpath('/website/websiteaccount_card.php',1).'?id='.$this->id;
+
+ if ($option != 'nolink')
+ {
+ // Add param to save lastsearch_values or not
+ $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
+ if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
+ if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
+ }
+
+ $linkclose='';
+ if (empty($notooltip))
+ {
+ if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
+ {
+ $label=$langs->trans("ShowWebsiteAccount");
+ $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
+ }
+ $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"';
+ $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"';
+ }
+ else $linkclose = ($morecss?' class="'.$morecss.'"':'');
+
+ $linkstart = '';
+ $linkend='';
+
+ if ($withpicto)
+ {
+ $result.=($linkstart.img_object(($notooltip?'':$label), 'label', ($notooltip?'':'class="classfortooltip"')).$linkend);
+ if ($withpicto != 2) $result.=' ';
+ }
+ $result.= $linkstart . $this->ref . $linkend;
+ return $result;
+ }
+
+ /**
+ * Return link to download file from a direct external access
+ *
+ * @param int $withpicto Add download picto into link
+ * @return string HTML link to file
+ */
+ function getDirectExternalLink($withpicto=0)
+ {
+ return 'todo';
+ }
+
+ /**
+ * Retourne le libelle du status d'un user (actif, inactif)
+ *
+ * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
+ * @return string Label of status
+ */
+ function getLibStatut($mode=0)
+ {
+ return $this->LibStatut($this->status,$mode);
+ }
+
+ /**
+ * Return the status
+ *
+ * @param int $status Id status
+ * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
+ * @return string Label of status
+ */
+ static function LibStatut($status,$mode=0)
+ {
+ global $langs;
+
+ if ($mode == 0)
+ {
+ $prefix='';
+ if ($status == 1) return $langs->trans('Enabled');
+ if ($status == 0) return $langs->trans('Disabled');
+ }
+ if ($mode == 1)
+ {
+ if ($status == 1) return $langs->trans('Enabled');
+ if ($status == 0) return $langs->trans('Disabled');
+ }
+ if ($mode == 2)
+ {
+ if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
+ if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
+ }
+ if ($mode == 3)
+ {
+ if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
+ if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
+ }
+ if ($mode == 4)
+ {
+ if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
+ if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
+ }
+ if ($mode == 5)
+ {
+ if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
+ if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
+ }
+ if ($mode == 6)
+ {
+ if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
+ if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
+ }
+ }
+
+ /**
+ * Charge les informations d'ordre info dans l'objet commande
+ *
+ * @param int $id Id of order
+ * @return void
+ */
+ function info($id)
+ {
+ $sql = 'SELECT rowid, date_creation as datec, tms as datem,';
+ $sql.= ' fk_user_creat, fk_user_modif';
+ $sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
+ $sql.= ' WHERE t.rowid = '.$id;
+ $result=$this->db->query($sql);
+ if ($result)
+ {
+ if ($this->db->num_rows($result))
+ {
+ $obj = $this->db->fetch_object($result);
+ $this->id = $obj->rowid;
+ if ($obj->fk_user_author)
+ {
+ $cuser = new User($this->db);
+ $cuser->fetch($obj->fk_user_author);
+ $this->user_creation = $cuser;
+ }
+
+ if ($obj->fk_user_valid)
+ {
+ $vuser = new User($this->db);
+ $vuser->fetch($obj->fk_user_valid);
+ $this->user_validation = $vuser;
+ }
+
+ if ($obj->fk_user_cloture)
+ {
+ $cluser = new User($this->db);
+ $cluser->fetch($obj->fk_user_cloture);
+ $this->user_cloture = $cluser;
+ }
+
+ $this->date_creation = $this->db->jdate($obj->datec);
+ $this->date_modification = $this->db->jdate($obj->datem);
+ $this->date_validation = $this->db->jdate($obj->datev);
+ }
+
+ $this->db->free($result);
+
+ }
+ else
+ {
+ dol_print_error($this->db);
+ }
+ }
+
+ /**
+ * Initialise object with example values
+ * Id must be 0 if object instance is a specimen
+ *
+ * @return void
+ */
+ public function initAsSpecimen()
+ {
+ $this->initAsSpecimenCommon();
+ }
+
+
+ /**
+ * Action executed by scheduler
+ * CAN BE A CRON TASK
+ *
+ * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK)
+ */
+ public function doScheduledJob()
+ {
+ global $conf, $langs;
+
+ $this->output = '';
+ $this->error='';
+
+ dol_syslog(__METHOD__, LOG_DEBUG);
+
+ // ...
+
+ return 0;
+ }
+}
+
+/**
+ * Class WebsiteAccountLine. You can also remove this and generate a CRUD class for lines objects.
+ */
+/*
+class WebsiteAccountLine
+{
+ // @var int ID
+ public $id;
+ // @var mixed Sample line property 1
+ public $prop1;
+ // @var mixed Sample line property 2
+ public $prop2;
+}
+*/
\ No newline at end of file
diff --git a/htdocs/websites/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php
similarity index 98%
rename from htdocs/websites/class/websitepage.class.php
rename to htdocs/website/class/websitepage.class.php
index 76526f29c0d..e2a5a09da99 100644
--- a/htdocs/websites/class/websitepage.class.php
+++ b/htdocs/website/class/websitepage.class.php
@@ -20,8 +20,8 @@
*/
/**
- * \file websites/websitepage.class.php
- * \ingroup websites
+ * \file website/websitepage.class.php
+ * \ingroup website
* \brief File for the CRUD class of websitepage (Create/Read/Update/Delete)
*/
@@ -313,7 +313,7 @@ class WebsitePage extends CommonObject
if ($result > 0)
{
global $dolibarr_main_data_root;
- $pathofwebsite=$dolibarr_main_data_root.'/websites/'.$websiteobj->ref;
+ $pathofwebsite=$dolibarr_main_data_root.'/website/'.$websiteobj->ref;
$filealias=$pathofwebsite.'/'.$this->pageurl.'.php';
$filetpl=$pathofwebsite.'/page'.$this->id.'.tpl.php';
@@ -408,7 +408,7 @@ class WebsitePage extends CommonObject
$label.= '