From 3bca0ad07d1223540e7aa5caf118ee5fefc92741 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 20 Oct 2017 21:39:19 +0200 Subject: [PATCH 1/4] More modern picto for switch on/off Work on website module --- htdocs/admin/translation.php | 10 +- htdocs/admin/{websites.php => website.php} | 14 +- htdocs/core/lib/functions.lib.php | 19 +- htdocs/core/lib/modulebuilder.lib.php | 9 + ...ebsites.class.php => modWebsite.class.php} | 32 +- htdocs/langs/en_US/admin.lang | 2 +- htdocs/langs/en_US/modulebuilder.lang | 1 + htdocs/modulebuilder/index.php | 18 +- .../template/class/myobject.class.php | 4 +- htdocs/societe/website.php | 241 ++++++--- .../class/website.class.php | 10 +- htdocs/website/class/websiteaccount.class.php | 494 ++++++++++++++++++ .../class/websitepage.class.php | 8 +- htdocs/{websites => website}/index.html | 0 htdocs/{websites => website}/index.php | 58 +- 15 files changed, 752 insertions(+), 168 deletions(-) rename htdocs/admin/{websites.php => website.php} (98%) rename htdocs/core/modules/{modWebsites.class.php => modWebsite.class.php} (80%) rename htdocs/{websites => website}/class/website.class.php (98%) create mode 100644 htdocs/website/class/websiteaccount.class.php rename htdocs/{websites => website}/class/websitepage.class.php (98%) rename htdocs/{websites => website}/index.html (100%) rename htdocs/{websites => website}/index.php (96%) 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/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/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..c0d4286c5bf 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/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7756f5cc3e5..84564cbb854 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -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/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 40a69851a0e..a6f4e8bc0f1 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 ''.$langs->trans("Type").''; print ''.$form->textwithpicto($langs->trans("ArrayOfKeyValues"), $langs->trans("ArrayOfKeyValuesDesc")).''; - print ''.$langs->trans("NotNull").''; - //print ''.$langs->trans("DefaultValue").''; + print ''.$form->textwithpicto($langs->trans("NotNull"), $langs->trans("NotNullDesc")).''; + print ''.$langs->trans("DefaultValue").''; print ''.$langs->trans("DatabaseIndex").''; print ''.$langs->trans("Position").''; print ''.$form->textwithpicto($langs->trans("Enabled"), $langs->trans("EnabledDesc")).''; @@ -1576,7 +1576,7 @@ elseif (! empty($module)) print ''; print ''; print ''; - //print ''; + print ''; print ''; print ''; print ''; @@ -1610,7 +1610,7 @@ elseif (! empty($module)) $proparrayofkeyval=$propval['arrayofkeyval']; $propnotnull=$propval['notnull']; $propsearchall=$propval['searchall']; - //$propdefault=$propval['default']; + $propdefault=$propval['default']; $propindex=$propval['index']; $propposition=$propval['position']; $propenabled=$propval['enabled']; @@ -1638,11 +1638,11 @@ elseif (! empty($module)) print ''; print $propnotnull; print ''; - /*print ''; + print ''; print $propdefault; - print '';*/ + print ''; print ''; - print $propindex?'X':''; + print $propindex?'1':''; print ''; print ''; print $propposition; @@ -1657,7 +1657,7 @@ elseif (! empty($module)) print $propisameasure?$propisameasure:''; print ''; print ''; - print $propsearchall?'X':''; + print $propsearchall?'1':''; print ''; print ''; print $propcomment; diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index e0a827f8c8c..6abb2f1b9a5 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -80,9 +80,9 @@ class MyObject extends CommonObject public $fields=array( 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), 'ref' =>array('type'=>'varchar(64)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), - 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'index'=>1, 'position'=>20), + 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1, 'css'=>'minwidth200'), - 'amount' =>array('type'=>'double(24,8)', 'label'=>'Amount', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Amount'), + 'amount' =>array('type'=>'double(24,8)', 'label'=>'Amount', 'enabled'=>1, 'visible'=>1, 'default'=>'null', 'position'=>40, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Amount'), 'note_public' =>array('type'=>'text', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>45), 'note_private' =>array('type'=>'text', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>46), 'date_creation' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>500), diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index 7f390973ec2..68fa531bc2a 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -23,13 +23,17 @@ /** * \file htdocs/societe/website.php - * \ingroup societe + * \ingroup website * \brief Page of web sites accounts */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +require_once DOL_DOCUMENT_ROOT.'/websites/class/websiteaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + $langs->load("companies"); @@ -87,97 +91,162 @@ if (empty($reshook)) */ $contactstatic = new Contact($db); +$objectwebsiteaccount = new WebsiteAccount($db); $form = new Form($db); -if ($id > 0) +$langs->load("companies"); + +$object = new Societe($db); +$result = $object->fetch($id); + +$title = $langs->trans("WebisteAccounts"); +llxHeader('', $title); + +$head = societe_prepare_head($object); + +dol_fiche_head($head, 'websites', $langs->trans("ThirdParty"), - 1, 'company'); + +$linkback = '' . $langs->trans("BackToList") . ''; + +dol_banner_tab($object, 'socid', $linkback, ($user->societe_id ? 0 : 1), 'rowid', 'nom'); + +print '
'; + +print '
'; + +print ''; + +// Prefix +if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field { - require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; - require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; - - $langs->load("companies"); - - - $object = new Societe($db); - $result = $object->fetch($id); - - $title=$langs->trans("WebisteAccounts"); - llxHeader('',$title); - - $head = societe_prepare_head($object); - - dol_fiche_head($head, 'websites', $langs->trans("ThirdParty"), -1, 'company'); - - $linkback = ''.$langs->trans("BackToList").''; - - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); - - print '
'; - - print '
'; - - print '
'; - - // Prefix - if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field - { - print ''; - } - - if ($object->client) - { - print ''; - } - - if ($object->fournisseur) - { - print ''; - } - - print '
'.$langs->trans('Prefix').''.$object->prefix_comm.'
'; - print $langs->trans('CustomerCode').''; - print $object->code_client; - if ($object->check_codeclient() <> 0) print ' ('.$langs->trans("WrongCustomerCode").')'; - print '
'; - print $langs->trans('SupplierCode').''; - print $object->code_fournisseur; - if ($object->check_codefournisseur() <> 0) print ' ('.$langs->trans("WrongSupplierCode").')'; - print '
'; - - print '
'; - - dol_fiche_end(); - - - - $morehtmlcenter=''; - if (! empty($conf->website->enabled)) - { - if (! empty($user->rights->societe->lire)) - { - $morehtmlcenter.=''.$langs->trans("AddWebsiteAccount").''; - } - else - { - $morehtmlcenter.=''.$langs->trans("AddAction").''; - } - } - - print '
'; - - $param='&id='.$id; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; - - print_barre_liste($langs->trans("WebsiteAccounts"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $morehtmlcenter, 0, -1, '', '', '', '', 0, 1, 1); - - - - - - + print '' . $langs->trans('Prefix') . '' . $object->prefix_comm . ''; } +if ($object->client) { + print ''; + print $langs->trans('CustomerCode') . ''; + print $object->code_client; + if ($object->check_codeclient() != 0) + print ' (' . $langs->trans("WrongCustomerCode") . ')'; + print ''; +} + +if ($object->fournisseur) { + print ''; + print $langs->trans('SupplierCode') . ''; + print $object->code_fournisseur; + if ($object->check_codefournisseur() != 0) + print ' (' . $langs->trans("WrongSupplierCode") . ')'; + print ''; +} + +print ''; + +print ''; + +dol_fiche_end(); + +$morehtmlcenter = ''; +if (! empty($conf->website->enabled)) { + if (! empty($user->rights->societe->lire)) { + $morehtmlcenter .= '' . $langs->trans("AddWebsiteAccount") . ''; + } else { + $morehtmlcenter .= '' . $langs->trans("AddAction") . ''; + } +} + +print '
'; + +$param = '&id=' . $id; +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) + $param .= '&contextpage=' . $contextpage; +if ($limit > 0 && $limit != $conf->liste_limit) + $param .= '&limit=' . $limit; + +print_barre_liste($langs->trans("WebsiteAccounts"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $morehtmlcenter, 0, - 1, '', '', '', '', 0, 1, 1); + + + + +// 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)"; +$sql.= " WHERE t.entity IN (".getEntity('websiteaccount').")"; +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')) + { + $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); + +dol_syslog($script_file, LOG_DEBUG); +$resql=$db->query($sql); +if (! $resql) +{ + dol_print_error($db); + exit; +} + + + llxFooter(); 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 = ' + * 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 this field is linked to a thirdparty ? + */ + protected $isnolinkedbythird = 1; + /** + * @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 = 1; + /** + * @var string String with name of icon for websiteaccount + */ + public $picto = 'websiteaccount@website'; + + + /** + * '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.= '
'; $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; - $link = 'load("admin"); $langs->load("other"); @@ -96,7 +96,7 @@ if (($pageid > 0 || $pageref) && $action != 'add') } global $dolibarr_main_data_root; -$pathofwebsite=$dolibarr_main_data_root.'/websites/'.$website; +$pathofwebsite=$dolibarr_main_data_root.'/website/'.$website; $filehtmlheader=$pathofwebsite.'/htmlheader.html'; $filecss=$pathofwebsite.'/styles.css.php'; $filejs=$pathofwebsite.'/javascript.js.php'; @@ -831,7 +831,7 @@ if ($action == 'updatemeta') $mastercontent = ''."\n"; $result = file_put_contents($filemaster, $mastercontent); @@ -1090,7 +1090,7 @@ $arrayofjs = array( ); $arrayofcss = array(); -llxHeader('', $langs->trans("WebsiteSetup"), $help_url, '', 0, 0, $arrayofjs, $arrayofcss, '', '', ''."\n".'
'); +llxHeader('', $langs->trans("websiteetup"), $help_url, '', 0, 0, $arrayofjs, $arrayofcss, '', '', ''."\n".'
'); print "\n".'
'; print ''; @@ -1143,16 +1143,16 @@ if (count($object->records) > 0) { // ***** Part for web sites - print '
'; + print '
'; print ''; print '
'; - print '
'; + print '
'; print $langs->trans("Website").': '; print '
'; - // List of websites - print '
'; + // List of website + print '
'; $out=''; $out.=''; print '
'; - print '
'; + print '
'; print $langs->trans("Page").': '; print '
'; - print '
'; + print '
'; if ($action != 'add') { @@ -1296,7 +1296,7 @@ if (count($object->records) > 0) if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone') { $disabled=''; - if (empty($user->rights->websites->write)) $disabled=' disabled="disabled"'; + if (empty($user->rights->website->write)) $disabled=' disabled="disabled"'; // Confirmation to clone if ($action == 'createfromclone') { @@ -1351,7 +1351,7 @@ if (count($object->records) > 0) $websitepage = new WebSitePage($db); $websitepage->fetch($pageid); - $realpage=$urlwithroot.'/public/websites/index.php?website='.$website.'&pageref='.$websitepage->pageurl; + $realpage=$urlwithroot.'/public/website/index.php?website='.$website.'&pageref='.$websitepage->pageurl; $pagealias = $websitepage->pageurl; print 'transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $realpage)).'">'; @@ -1365,7 +1365,7 @@ if (count($object->records) > 0) print '
'; $urlext=$virtualurl.'/'.$pagealias.'.php'; - $urlint=$urlwithroot.'/public/websites/index.php?website='.$website; + $urlint=$urlwithroot.'/public/website/index.php?website='.$website; print 'transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $dataroot, $urlext)).'">'; print $form->textwithpicto('', $langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $dataroot, $virtualurl?$urlext:''.$langs->trans("VirtualHostUrlNotDefined").''), 1, 'preview_ext'); print ''; @@ -1414,7 +1414,7 @@ if (count($object->records) > 0) url: "'.DOL_URL_ROOT.'/core/ajax/saveinplace.php", data: { field: \'editval_virtualhost\', - element: \'websites\', + element: \'website\', table_element: \'website\', fk_element: '.$object->id.', value: newurl, @@ -1433,7 +1433,7 @@ if (count($object->records) > 0) } else { - print '
'; + print '
'; $langs->load("errors"); print $langs->trans("ErrorModuleSetupNotComplete"); print '
'; @@ -1575,7 +1575,7 @@ if ($action == 'createsite') /*$h = 0; $head = array(); - $head[$h][0] = dol_buildpath('/websites/index.php',1).'?id='.$object->id; + $head[$h][0] = dol_buildpath('/website/index.php',1).'?id='.$object->id; $head[$h][1] = $langs->trans("AddSite"); $head[$h][2] = 'card'; $h++; @@ -1605,7 +1605,7 @@ if ($action == 'createsite') print ''; print ''; - print $form->textwithpicto($langs->trans('Virtualhost'), $langs->trans("SetHereVirtualHost", DOL_DATA_ROOT.'/websites/websiteref'), 1, 'help', '', 0, 2, 'tooltipvirtual'); + print $form->textwithpicto($langs->trans('Virtualhost'), $langs->trans("SetHereVirtualHost", DOL_DATA_ROOT.'/website/websiteref'), 1, 'help', '', 0, 2, 'tooltipvirtual'); print ''; print ''; print ''; @@ -1642,7 +1642,7 @@ if ($action == 'editmeta' || $action == 'create') /*$h = 0; $head = array(); - $head[$h][0] = dol_buildpath('/websites/index.php',1).'?id='.$object->id; + $head[$h][0] = dol_buildpath('/website/index.php',1).'?id='.$object->id; $head[$h][1] = $langs->trans("AddPage"); $head[$h][2] = 'card'; $h++; @@ -1686,7 +1686,7 @@ if ($action == 'editmeta' || $action == 'create') print ''; print $langs->trans('WEBSITE_PAGEURL'); print ''; - print '/public/websites/index.php?website='.urlencode($website).'&pageid='.urlencode($pageid); + print '/public/website/index.php?website='.urlencode($website).'&pageid='.urlencode($pageid); print ''; /* @@ -1875,7 +1875,7 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa //include_once $original_file_osencoded; */ - /*print '';*/ } else @@ -1913,7 +1913,7 @@ function dolSavePageAlias($filealias, $object, $objectpage) $aliascontent.= "// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page\n"; $aliascontent.= 'global $dolibarr_main_data_root;'."\n"; $aliascontent.= 'if (empty($dolibarr_main_data_root)) require \'./page'.$objectpage->id.'.tpl.php\'; '; - $aliascontent.= 'else require $dolibarr_main_data_root.\'/websites/\'.$website->ref.\'/page'.$objectpage->id.'.tpl.php\';'."\n"; + $aliascontent.= 'else require $dolibarr_main_data_root.\'/website/\'.$website->ref.\'/page'.$objectpage->id.'.tpl.php\';'."\n"; $aliascontent.= '?>'."\n"; $result = file_put_contents($filealias, $aliascontent); if (! empty($conf->global->MAIN_UMASK)) @@ -1965,7 +1965,7 @@ function dolSavePageContent($filetpl, $object, $objectpage) $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; - $tplcontent.= 'ref.'/htmlheader.html"); ?>'."\n"; + $tplcontent.= 'ref.'/htmlheader.html"); ?>'."\n"; $tplcontent.= ''."\n"; $tplcontent.= $objectpage->htmlheader."\n"; $tplcontent.= ''."\n"; From 19a5780f7f33a16b88fd0681ddea51b8bac220a8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 20 Oct 2017 23:48:42 +0200 Subject: [PATCH 2/4] Clean code --- htdocs/collab/index.php | 8 +- htdocs/core/class/commonobject.class.php | 25 +- .../core/class/emailsenderprofile.class.php | 5 - .../filemanagerdol/connectors/php/config.php | 2 +- htdocs/core/lib/website.lib.php | 8 +- htdocs/core/website.inc.php | 2 +- htdocs/holiday/class/holiday.class.php | 1 - .../install/mysql/migration/6.0.0-7.0.0.sql | 40 ++ .../install/mysql/tables/llx_resource.key.sql | 2 + .../mysql/tables/llx_websiteaccount.key.sql | 26 + .../mysql/tables/llx_websiteaccount.sql | 32 ++ .../tables/llx_websiteaccount_extrafields.sql | 23 + htdocs/langs/en_US/website.lang | 3 +- htdocs/modulebuilder/index.php | 2 +- .../template/class/myobject.class.php | 6 +- .../modulebuilder/template/myobject_list.php | 8 +- htdocs/product/class/product.class.php | 1 - .../inventory/class/inventory.class.php | 4 - .../product/stock/class/productlot.class.php | 1 - htdocs/public/websites/index.php | 10 +- htdocs/public/websites/styles.css.php | 8 +- htdocs/resource/card.php | 24 +- htdocs/resource/class/dolresource.class.php | 79 +-- htdocs/resource/contact.php | 22 +- htdocs/resource/document.php | 24 +- htdocs/resource/note.php | 22 +- htdocs/societe/website.php | 478 +++++++++++++++++- htdocs/theme/eldy/style.css.php | 2 +- htdocs/theme/md/style.css.php | 2 +- htdocs/website/class/websiteaccount.class.php | 9 +- htdocs/website/index.php | 14 +- 31 files changed, 684 insertions(+), 209 deletions(-) create mode 100644 htdocs/install/mysql/tables/llx_websiteaccount.key.sql create mode 100644 htdocs/install/mysql/tables/llx_websiteaccount.sql create mode 100644 htdocs/install/mysql/tables/llx_websiteaccount_extrafields.sql 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/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/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/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 a6f4e8bc0f1..d128b9df5b9 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -1598,7 +1598,7 @@ elseif (! empty($module)) $type=gettype($tmpobjet->$propname); $default=$propdefault[$propname]; // Discard generic properties - if (in_array($propname, array('element', 'childtables', 'table_element', 'table_element_line', 'class_element_line', 'isnolinkedbythird', 'ismultientitymanaged'))) continue; + if (in_array($propname, array('element', 'childtables', 'table_element', 'table_element_line', 'class_element_line', 'ismultientitymanaged'))) continue; // Keep or not lines if (in_array($propname, array('fk_element', 'lines'))) continue; diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 6abb2f1b9a5..29de762c486 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -44,14 +44,10 @@ class MyObject extends CommonObject */ public $table_element = 'myobject'; - /** - * @var array Does this field is linked to a thirdparty ? - */ - protected $isnolinkedbythird = 1; /** * @var array Does myobject support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe */ - protected $ismultientitymanaged = 1; + protected $ismultientitymanaged = 0; /** * @var string String with name of icon for myobject */ diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index ed5d82c5301..6900a947a06 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -213,7 +213,8 @@ $sql.=$hookmanager->resPrint; $sql=preg_replace('/, $/','', $sql); $sql.= " FROM ".MAIN_DB_PREFIX."myobject as t"; if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."myobject_extrafields as ef on (t.rowid = ef.fk_object)"; -$sql.= " WHERE t.entity IN (".getEntity('myobject').")"; +if ($object->getIsmultientitymanaged() == 1) $sql.= " WHERE t.entity IN (".getEntity('myobject').")"; +else $sql.=" WHERE 1 = 1"; foreach($search as $key => $val) { $mode_search=(($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key]))?1:0); @@ -265,7 +266,6 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) $sql.= $db->plimit($limit+1, $offset); -dol_syslog($script_file, LOG_DEBUG); $resql=$db->query($sql); if (! $resql) { @@ -351,9 +351,9 @@ if ($sall) } $moreforfilter = ''; -$moreforfilter.='
'; +/*$moreforfilter.='
'; $moreforfilter.= $langs->trans('MyFilter') . ': '; -$moreforfilter.= '
'; +$moreforfilter.= '
';*/ $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 17bbc1c8009..311c05858a3 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -47,7 +47,6 @@ class Product extends CommonObject public $table_element='product'; public $fk_element='fk_product'; protected $childtables=array('supplier_proposaldet', 'propaldet','commandedet','facturedet','contratdet','facture_fourn_det','commande_fournisseurdet'); // To test if we can delete object - protected $isnolinkedbythird = 1; // No field fk_soc protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe /** diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 3fc42f15f70..c4e5a7be4c8 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -44,10 +44,6 @@ class Inventory extends CommonObject */ public $table_element = 'inventory'; - /** - * @var array Does this field is linked to a thirdparty ? - */ - protected $isnolinkedbythird = 1; /** * @var array Does inventory support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe */ diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php index 78ea81bd41d..b34a656422c 100644 --- a/htdocs/product/stock/class/productlot.class.php +++ b/htdocs/product/stock/class/productlot.class.php @@ -46,7 +46,6 @@ class Productlot extends CommonObject public $picto='barcode'; - public $isnolinkedbythird = 1; public $ismultientitymanaged = 1; /** diff --git a/htdocs/public/websites/index.php b/htdocs/public/websites/index.php index c82ff9975d0..0772965c5e6 100644 --- a/htdocs/public/websites/index.php +++ b/htdocs/public/websites/index.php @@ -16,7 +16,7 @@ */ /** - * \file htdocs/public/websites/index.php + * \file htdocs/public/website/index.php * \ingroup website * \brief Page to output pages * \author Laurent Destailleur @@ -66,8 +66,8 @@ if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_AP if (empty($pageid)) { - require_once DOL_DOCUMENT_ROOT.'/websites/class/website.class.php'; - require_once DOL_DOCUMENT_ROOT.'/websites/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); @@ -138,11 +138,11 @@ if ($pageid == 'css') // No more used ? //if (empty($dolibarr_nocache)) header('Cache-Control: max-age=3600, public, must-revalidate'); //else header('Cache-Control: no-cache'); - $original_file=$dolibarr_main_data_root.'/websites/'.$websitekey.'/styles.css.php'; + $original_file=$dolibarr_main_data_root.'/website/'.$websitekey.'/styles.css.php'; } else { - $original_file=$dolibarr_main_data_root.'/websites/'.$websitekey.'/page'.$pageid.'.tpl.php'; + $original_file=$dolibarr_main_data_root.'/website/'.$websitekey.'/page'.$pageid.'.tpl.php'; } // Find the subdirectory name as the reference diff --git a/htdocs/public/websites/styles.css.php b/htdocs/public/websites/styles.css.php index 7fe80f9b66e..694eaaf344f 100644 --- a/htdocs/public/websites/styles.css.php +++ b/htdocs/public/websites/styles.css.php @@ -16,7 +16,7 @@ */ /** - * \file htdocs/public/websites/styles.css.php + * \file htdocs/public/website/styles.css.php * \ingroup website * \brief Page to output style page. Called with */ @@ -65,8 +65,8 @@ if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_AP if (empty($pageid)) { - require_once DOL_DOCUMENT_ROOT.'/websites/class/website.class.php'; - require_once DOL_DOCUMENT_ROOT.'/websites/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); if ($websiteid) @@ -97,7 +97,7 @@ if (empty($pageid)) // Security: Delete string ../ into $original_file global $dolibarr_main_data_root; -$original_file=$dolibarr_main_data_root.'/websites/'.$website.'/styles.css.php'; +$original_file=$dolibarr_main_data_root.'/website/'.$website.'/styles.css.php'; // Find the subdirectory name as the reference $refname=basename(dirname($original_file)."/"); diff --git a/htdocs/resource/card.php b/htdocs/resource/card.php index db6eed63b3b..211631e3dd5 100644 --- a/htdocs/resource/card.php +++ b/htdocs/resource/card.php @@ -43,7 +43,7 @@ $langs->load("main"); // Get parameters $id = GETPOST('id','int'); $action = GETPOST('action','alpha'); -$ref = GETPOST('ref'); +$ref = GETPOST('ref','alpha'); $description = GETPOST('description'); $confirm = GETPOST('confirm'); $fk_code_type_resource = GETPOST('fk_code_type_resource','alpha'); @@ -58,8 +58,8 @@ if (! $user->rights->resource->read) accessforbidden(); $object = new Dolresource($db); -$objectFetchRes = $object->fetch($id); -if (! ($objectFetchRes > 0)) dol_print_error($db, $object->error); +$result = $object->fetch($id, $ref); +if (! ($result > 0)) dol_print_error($db, $object->error); $extrafields = new ExtraFields($db); @@ -68,7 +68,7 @@ $extrafields = new ExtraFields($db); $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); $hookmanager->initHooks(array('resource_card','globalcard')); -$parameters=array('resource_id'=>$id); +$parameters=array('resource_id'=>$object->id); $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -159,17 +159,17 @@ if (empty($reshook)) * * Put here all code to build page ****************************************************/ + $pagetitle = $langs->trans('ResourceCard'); llxHeader('',$pagetitle,''); $form = new Form($db); $formresource = new FormResource($db); -if ( $objectFetchRes > 0 ) +if ($object->id > 0) { $head=resource_prepare_head($object); - if ($action == 'edit' ) { if ( ! $user->rights->resource->write ) @@ -189,7 +189,7 @@ if ( $objectFetchRes > 0 ) // Ref print ''.$langs->trans("ResourceFormLabel_ref").''; - print ''; + print ''; // Type print ''.$langs->trans("ResourceType").''; @@ -200,7 +200,7 @@ if ( $objectFetchRes > 0 ) // Description print ''.$langs->trans("Description").''; print ''; - print ''; + print ''; print ''; // Other attributes @@ -232,7 +232,7 @@ if ( $objectFetchRes > 0 ) // Confirm deleting resource line if ($action == 'delete') { - $formconfirm = $form->formconfirm("card.php?&id=".$id,$langs->trans("DeleteResource"),$langs->trans("ConfirmDeleteResource"),"confirm_delete_resource",'','',1); + $formconfirm = $form->formconfirm("card.php?&id=".$object->id,$langs->trans("DeleteResource"),$langs->trans("ConfirmDeleteResource"),"confirm_delete_resource",'','',1); } // Print form confirm @@ -246,7 +246,7 @@ if ( $objectFetchRes > 0 ) $morehtmlref.='
'; - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref); + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); print '
'; @@ -302,7 +302,7 @@ if ( $objectFetchRes > 0 ) if($user->rights->resource->write) { print ''; } } @@ -312,7 +312,7 @@ if ( $objectFetchRes > 0 ) if($user->rights->resource->delete) { 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='
'; $morehtmlref.='
'; - - - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref); - - + + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + print '
'; print '
'; - - + + // Object print ''; @@ -152,7 +152,7 @@ if ($id > 0 || ! empty($ref)) print ''; dol_fiche_end(); - + print '
'; if (! empty($conf->global->RESOURCE_HIDE_ADD_CONTACT_USER)) $hideaddcontactforuser=1; diff --git a/htdocs/resource/document.php b/htdocs/resource/document.php index f3c48f754ec..64ac151fede 100644 --- a/htdocs/resource/document.php +++ b/htdocs/resource/document.php @@ -40,7 +40,7 @@ $langs->load("resource"); $langs->load("companies"); $id = GETPOST('id','int'); -$ref = GETPOST('ref', 'alpha'); +$ref = GETPOST('ref','alpha'); $action = GETPOST('action','alpha'); $confirm = GETPOST('confirm','alpha'); @@ -100,20 +100,20 @@ if ($object->id) $totalsize+=$file['size']; } - + $linkback = '' . $langs->trans("BackToList") . ''; - - + + $morehtmlref='
'; $morehtmlref.='
'; - - - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref); - - + + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + print '
'; print '
'; - + print '
'; // Resource type @@ -131,10 +131,10 @@ if ($object->id) print ''; dol_fiche_end(); - + $modulepart = 'dolresource'; $permission = $user->rights->resource->write; - $param = '&id=' . $object->id; + include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php'; } diff --git a/htdocs/resource/note.php b/htdocs/resource/note.php index 20d96591c7b..5fe1751d1f4 100644 --- a/htdocs/resource/note.php +++ b/htdocs/resource/note.php @@ -33,7 +33,7 @@ $langs->load('companies'); $langs->load("interventions"); $id = GETPOST('id','int'); -$ref = GETPOST('ref', 'alpha'); +$ref = GETPOST('ref','alpha'); $action=GETPOST('action','alpha'); // Security check @@ -67,18 +67,18 @@ if ($id > 0 || ! empty($ref)) dol_fiche_head($head, 'note', $langs->trans('ResourceSingular'), -1, 'resource'); $linkback = '' . $langs->trans("BackToList") . ''; - - + + $morehtmlref='
'; $morehtmlref.='
'; - - - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref); - - + + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + print '
'; print '
'; - + print '
'; // Resource type @@ -88,11 +88,11 @@ if ($id > 0 || ! empty($ref)) print $object->type_label; print ''; print ''; - + print "
"; print '
'; - + $permission=$user->rights->resource->write; $cssclass='titlefield'; include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php'; diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index 68fa531bc2a..eee46843756 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -30,12 +30,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; -require_once DOL_DOCUMENT_ROOT.'/websites/class/websiteaccount.class.php'; +require_once DOL_DOCUMENT_ROOT.'/website/class/websiteaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; - -$langs->load("companies"); +$langs->loadLangs(array("companies","website")); $search_status=GETPOST('search_status'); @@ -52,12 +51,60 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -if (! $sortfield) $sortfield='a.login'; +if (! $sortfield) $sortfield='t.login'; if (! $sortorder) $sortorder='ASC'; +// Initialize technical objects +$object=new Societe($db); +$objectwebsiteaccount=new WebsiteAccount($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->website->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('websiteaccountlist')); // Note that conf->hooks_modules contains array +// Fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('websiteaccount'); +$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_'); + +unset($objectwebsiteaccount->fields['fk_soc']); // Remove this field, we are already on the thirdparty + // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('websitethirdparty')); +// Initialize array of search criterias +$search_all=trim(GETPOST("search_all",'alpha')); +$search=array(); +foreach($objectwebsiteaccount->fields as $key => $val) +{ + if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha'); +} + +// List of fields to search into when doing a "search in all" +$fieldstosearchall = array(); +foreach($objectwebsiteaccount->fields as $key => $val) +{ + if ($val['searchall']) $fieldstosearchall['t.'.$key]=$val['label']; +} + +// Definition of fields for list +$arrayfields=array(); +foreach($objectwebsiteaccount->fields as $key => $val) +{ + // If $val['visible']==0, then we never show the field + if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>$val['enabled']); +} +// Extra fields +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +{ + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]); + } +} + +if ($id > 0) +{ + $result = $object->fetch($id); +} + /* * Actions @@ -76,12 +123,32 @@ if (empty($reshook)) exit; } + // Selection of new fields + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + // Purge search criteria - if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers + if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') ||GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers { - $actioncode=''; - $search_agenda_label=''; + foreach($objectwebsiteaccount->fields as $key => $val) + { + $search[$key]=''; + } + $toselect=''; + $search_array_options=array(); } + if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha') + || GETPOST('button_search_x','alpha') || GETPOST('button_search.x','alpha') || GETPOST('button_search','alpha')) + { + $massaction=''; // Protection to avoid mass action if we force a new search during a mass action confirmation + } + + // Mass actions + $objectclass='WebsiteAccount'; + $objectlabel='WebsiteAccount'; + $permtoread = $user->rights->societe->lire; + $permtodelete = $user->rights->societe->supprimer; + $uploaddir = $conf->societe->dir_output; + include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } @@ -91,21 +158,34 @@ if (empty($reshook)) */ $contactstatic = new Contact($db); -$objectwebsiteaccount = new WebsiteAccount($db); $form = new Form($db); $langs->load("companies"); -$object = new Societe($db); -$result = $object->fetch($id); - -$title = $langs->trans("WebisteAccounts"); +$title = $langs->trans("WebsiteAccounts"); llxHeader('', $title); +$param=''; +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); +if ($id > 0) $param.='&id='.urlencode($id); +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); +foreach($search as $key => $val) +{ + $param.= '&search_'.$key.'='.urlencode($search[$key]); +} +if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); +// Add $param from extra fields +foreach ($search_array_options as $key => $val) +{ + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); +} + $head = societe_prepare_head($object); -dol_fiche_head($head, 'websites', $langs->trans("ThirdParty"), - 1, 'company'); +dol_fiche_head($head, 'website', $langs->trans("ThirdParty"), - 1, 'company'); $linkback = '' . $langs->trans("BackToList") . ''; @@ -150,7 +230,7 @@ dol_fiche_end(); $morehtmlcenter = ''; if (! empty($conf->website->enabled)) { if (! empty($user->rights->societe->lire)) { - $morehtmlcenter .= '' . $langs->trans("AddWebsiteAccount") . ''; + $morehtmlcenter .= '' . $langs->trans("AddWebsiteAccount") . ''; } else { $morehtmlcenter .= '' . $langs->trans("AddAction") . ''; } @@ -158,15 +238,6 @@ if (! empty($conf->website->enabled)) { print '
'; -$param = '&id=' . $id; -if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) - $param .= '&contextpage=' . $contextpage; -if ($limit > 0 && $limit != $conf->liste_limit) - $param .= '&limit=' . $limit; - -print_barre_liste($langs->trans("WebsiteAccounts"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $morehtmlcenter, 0, - 1, '', '', '', '', 0, 1, 1); - - // Build and execute select @@ -185,7 +256,8 @@ $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)"; -$sql.= " WHERE t.entity IN (".getEntity('websiteaccount').")"; +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); @@ -237,7 +309,6 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) $sql.= $db->plimit($limit+1, $offset); -dol_syslog($script_file, LOG_DEBUG); $resql=$db->query($sql); if (! $resql) { @@ -245,6 +316,363 @@ if (! $resql) exit; } +$num = $db->num_rows($resql); + + + +$arrayofselected=is_array($toselect)?$toselect:array(); + +$param=''; +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); +foreach($search as $key => $val) +{ + $param.= '&search_'.$key.'='.urlencode($search[$key]); +} +if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); +// Add $param from extra fields +foreach ($search_array_options as $key => $val) +{ + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); +} + +// 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 ''; +if ($optioncss != '') print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton.' '.$morehtmlcenter, $num, $nbtotalofrecords, 'title_companies', 0, '', '', $limit); + +if ($sall) +{ + foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); + print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall); +} + +/*$moreforfilter = ''; +$moreforfilter.='
'; +$moreforfilter.= $langs->trans('MyFilter') . ': '; +$moreforfilter.= '
';*/ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters, $objectwebsiteaccount); // Note that $action and $objectwebsiteaccount may have been modified by hook +if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; +else $moreforfilter = $hookmanager->resPrint; + +if (! empty($moreforfilter)) +{ + print '
'; + print $moreforfilter; + print '
'; +} + +$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; +$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); + +print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table +print ''."\n"; + + +// Fields title search +// -------------------------------------------------------------------- +print ''; +foreach($objectwebsiteaccount->fields as $key => $val) +{ + if (in_array($key, array('date_creation', 'tms', 'import_key', 'status'))) continue; + $align=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $align='center'; + if (in_array($val['type'], array('timestamp'))) $align.=' nowrap'; + if ($key == 'status') $align.=($align?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) print ''; +} +// Extra fields +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +{ + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + $typeofextrafield=$extrafields->attribute_type[$key]; + print ''; + } + } +} +// Fields from hook +$parameters=array('arrayfields'=>$arrayfields); +$reshook=$hookmanager->executeHooks('printFieldListOption', $parameters, $objectwebsiteaccount); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +// Rest of fields search +foreach($objectwebsiteaccount->fields as $key => $val) +{ + if (! in_array($key, array('date_creation', 'tms', 'import_key', 'status'))) continue; + $align=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $align='center'; + if (in_array($val['type'], array('timestamp'))) $align.=' nowrap'; + if ($key == 'status') $align.=($align?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) print ''; +} +// Action column +print ''; +print ''."\n"; + + +// Fields title label +// -------------------------------------------------------------------- +print ''; +foreach($objectwebsiteaccount->fields as $key => $val) +{ + if (in_array($key, array('date_creation', 'tms', 'import_key', 'status'))) continue; + $align=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $align='center'; + if (in_array($val['type'], array('timestamp'))) $align.='nowrap'; + if ($key == 'status') $align.=($align?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n"; +} +// Extra fields +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +{ + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + $sortonfield = "ef.".$key; + if (! empty($extrafields->attribute_computed[$key])) $sortonfield=''; + print getTitleFieldOfList($langs->trans($extralabels[$key]), 0, $_SERVER["PHP_SELF"], $sortonfield, "", $param, ($align?'align="'.$align.'"':''), $sortfield, $sortorder)."\n"; + } + } +} +// Hook fields +$parameters=array('arrayfields'=>$arrayfields); +$reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $objectwebsiteaccount); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +// Rest of fields title +foreach($objectwebsiteaccount->fields as $key => $val) +{ + if (! in_array($key, array('date_creation', 'tms', 'import_key', 'status'))) continue; + $align=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $align='center'; + if (in_array($val['type'], array('timestamp'))) $align.=' nowrap'; + if ($key == 'status') $align.=($align?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n"; +} +print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'maxwidthsearch ')."\n"; +print ''."\n"; + + +// Detect if we need a fetch on each output line +$needToFetchEachLine=0; +foreach ($extrafields->attribute_computed as $key => $val) +{ + if (preg_match('/\$object/',$val)) $needToFetchEachLine++; // There is at least one compute field that use $object +} + + +// Loop on record +// -------------------------------------------------------------------- +$i=0; +$totalarray=array(); +while ($i < min($num, $limit)) +{ + $obj = $db->fetch_object($resql); + if (empty($obj)) break; // Should not happen + + // Store properties in $object + $objectwebsiteaccount->id = $obj->rowid; + foreach($objectwebsiteaccount->fields as $key => $val) + { + if (isset($obj->$key)) $objectwebsiteaccount->$key = $obj->$key; + } + + // Show here line of result + print ''; + foreach($objectwebsiteaccount->fields as $key => $val) + { + if (in_array($key, array('date_creation', 'tms', 'import_key', 'status'))) continue; // Discard some field output at end + $align=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $align='center'; + if (in_array($val['type'], array('timestamp'))) $align.='nowrap'; + if ($key == 'status') $align.=($align?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print ''; + if (in_array($val['type'], array('date'))) print dol_print_date($db->jdate($obj->$key), 'day', 'tzuser'); + elseif (in_array($val['type'], array('datetime','timestamp'))) print dol_print_date($db->jdate($obj->$key), 'dayhour', 'tzuser'); + elseif ($key == 'ref') print $objectwebsiteaccount->getNomUrl(1, '', 0, '', 1); + elseif ($key == 'status') print $objectwebsiteaccount->getLibStatut(3); + else print $obj->$key; + print ''; + if (! $i) $totalarray['nbfield']++; + if (! empty($val['isameasure'])) + { + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.'.$key; + $totalarray['val']['t.'.$key] += $obj->$key; + } + } + } + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + print 'getAlignFlag($key); + if ($align) print ' align="'.$align.'"'; + print '>'; + $tmpkey='options_'.$key; + print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1); + print ''; + if (! $i) $totalarray['nbfield']++; + if (! empty($val['isameasure'])) + { + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='ef.'.$tmpkey; + $totalarray['val']['ef.'.$tmpkey] += $obj->$tmpkey; + } + } + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $objectwebsiteaccount); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Rest of fields + foreach($objectwebsiteaccount->fields as $key => $val) + { + if (! in_array($key, array('date_creation', 'tms', 'import_key', 'status'))) continue; // Keep only field not yet already output + $align=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center'; + if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap'; + if ($key == 'status') $align.=($align?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print ''; + if (in_array($val['type'], array('date'))) print dol_print_date($db->jdate($obj->$key), 'day', 'tzuser'); + elseif (in_array($val['type'], array('datetime','timestamp'))) print dol_print_date($db->jdate($obj->$key), 'dayhour', 'tzuser'); + elseif ($key == 'status') print $objectwebsiteaccount->getLibStatut(3); + else print $obj->$key; + print ''; + if (! $i) $totalarray['nbfield']++; + if (! empty($val['isameasure'])) + { + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.'.$key; + $totalarray['val']['t.'.$key] += $obj->$key; + } + } + } + // Action column + print ''; + if (! $i) $totalarray['nbfield']++; + + print ''; + + $i++; +} + +// Show total line +if (isset($totalarray['pos'])) +{ + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if (! empty($totalarray['pos'][$i])) print ''; + else + { + if ($i == 1) + { + if ($num < $limit) print ''; + else print ''; + } + else print ''; + } + } + print ''; +} + +// If no record found +if ($num == 0) +{ + $colspan=1; + foreach($arrayfields as $key => $val) { if (! empty($val['checked'])) $colspan++; } + print ''; +} + + +$db->free($resql); + +$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters, $objectwebsiteaccount); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +print '
'; + if (in_array($typeofextrafield, array('varchar', 'int', 'double', 'select')) && empty($extrafields->attribute_computed[$key])) + { + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + $searchclass=''; + if (in_array($typeofextrafield, array('varchar', 'select'))) $searchclass='searchstring'; + if (in_array($typeofextrafield, array('int', 'double'))) $searchclass='searchnum'; + print ''; + } + print ''; +$searchpicto=$form->showFilterButtons(); +print $searchpicto; +print '
'; + if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + { + $selected=0; + if (in_array($obj->rowid, $arrayofselected)) $selected=1; + print ''; + } + print '
'.price($totalarray['val'][$totalarray['pos'][$i]]).''.$langs->trans("Total").''.$langs->trans("Totalforthispage").'
'.$langs->trans("NoRecordFound").'
'."\n"; +print '
'."\n"; + +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").''; + } +} diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index fbdb612e398..7c25436d013 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(); } 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/website/class/websiteaccount.class.php b/htdocs/website/class/websiteaccount.class.php index f7026a770b5..267eae9ac57 100644 --- a/htdocs/website/class/websiteaccount.class.php +++ b/htdocs/website/class/websiteaccount.class.php @@ -44,18 +44,15 @@ class WebsiteAccount extends CommonObject */ public $table_element = 'websiteaccount'; - /** - * @var array Does this field is linked to a thirdparty ? - */ - protected $isnolinkedbythird = 1; /** * @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 = 1; + protected $ismultientitymanaged = 0; + /** * @var string String with name of icon for websiteaccount */ - public $picto = 'websiteaccount@website'; + public $picto = 'object_globe'; /** diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 2aea9d37df0..243781e0e04 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1143,16 +1143,16 @@ if (count($object->records) > 0) { // ***** Part for web sites - print '
'; + print '
'; print ''; print '
'; - print '
'; + print '
'; print $langs->trans("Website").': '; print '
'; // List of website - print '
'; + print '
'; $out=''; $out.=''; print '
'; - print '
'; + print '
'; print $langs->trans("Page").': '; print '
'; - print '
'; + print '
'; if ($action != 'add') { @@ -1433,7 +1433,7 @@ if (count($object->records) > 0) } else { - print '
'; + print '
'; $langs->load("errors"); print $langs->trans("ErrorModuleSetupNotComplete"); print '
'; From e74aae18ebe6c6c5b9cc0bede48602afd965c52a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 21 Oct 2017 12:25:51 +0200 Subject: [PATCH 3/4] CSS --- htdocs/theme/eldy/style.css.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 7c25436d013..d5489a432db 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -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; From 1426737a268bcef7231837ddf8418635abeea387 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 21 Oct 2017 12:26:14 +0200 Subject: [PATCH 4/4] Work on website --- htdocs/core/lib/company.lib.php | 28 ++++++++++++++++++++++++ htdocs/core/modules/modWebsite.class.php | 2 +- htdocs/langs/en_US/admin.lang | 2 +- htdocs/societe/website.php | 22 ++----------------- 4 files changed, 32 insertions(+), 22 deletions(-) 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/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index c0d4286c5bf..47d44d66164 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -80,7 +80,7 @@ class modWebsite extends DolibarrModules // New pages on tabs // ----------------- - $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 + //$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 //------ diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 84564cbb854..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 diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index eee46843756..ef8659016b1 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -230,7 +230,7 @@ dol_fiche_end(); $morehtmlcenter = ''; if (! empty($conf->website->enabled)) { if (! empty($user->rights->societe->lire)) { - $morehtmlcenter .= '' . $langs->trans("AddWebsiteAccount") . ''; + $morehtmlcenter .= '' . $langs->trans("AddWebsiteAccount") . ''; } else { $morehtmlcenter .= '' . $langs->trans("AddAction") . ''; } @@ -318,26 +318,8 @@ if (! $resql) $num = $db->num_rows($resql); - - $arrayofselected=is_array($toselect)?$toselect:array(); -$param=''; -if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); -if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); -foreach($search as $key => $val) -{ - $param.= '&search_'.$key.'='.urlencode($search[$key]); -} -if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); -// Add $param from extra fields -foreach ($search_array_options as $key => $val) -{ - $crit=$val; - $tmpkey=preg_replace('/search_options_/','',$key); - if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); -} - // List of mass actions available $arrayofmassactions = array( //'presend'=>$langs->trans("SendByMail"), @@ -358,7 +340,7 @@ print ''; print ''; print ''; -print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton.' '.$morehtmlcenter, $num, $nbtotalofrecords, 'title_companies', 0, '', '', $limit); +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton.' '.$morehtmlcenter, $num, $nbtotalofrecords, 'unlock', 0, '', '', $limit); if ($sall) {