From 32025de20234453abb87e6aa6c6ca36330b9d9a8 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Mon, 3 May 2010 08:22:35 +0000 Subject: [PATCH] according to new tree directory --- htdocs/comm/action/fiche.php | 2 +- htdocs/comm/propal.php | 2 +- htdocs/commande/fiche.php | 2 +- htdocs/compta/commande/fiche.php | 2 +- htdocs/compta/facture.php | 2 +- htdocs/compta/propal.php | 2 +- htdocs/core/class/html.form.class.php | 3081 +++++++++++++++++ htdocs/core/class/html.formactions.class.php | 177 + htdocs/core/class/html.formadmin.class.php | 293 ++ htdocs/core/class/html.formcompany.class.php | 570 +++ htdocs/fichinter/contact.php | 2 +- htdocs/fourn/commande/contact.php | 2 +- htdocs/fourn/facture/contact.php | 2 +- htdocs/fourn/facture/fiche.php | 2 +- htdocs/html.formactions.class.php | 2 +- .../barcode/html.formbarcode.class.php | 2 +- htdocs/install/index.php | 4 +- htdocs/product/traduction.php | 2 +- htdocs/projet/contact.php | 2 +- htdocs/projet/fiche.php | 2 +- htdocs/projet/tasks/contact.php | 2 +- htdocs/public/members/new.php | 2 +- htdocs/user/param_ihm.php | 2 +- 23 files changed, 4141 insertions(+), 20 deletions(-) create mode 100644 htdocs/core/class/html.form.class.php create mode 100644 htdocs/core/class/html.formactions.class.php create mode 100644 htdocs/core/class/html.formadmin.class.php create mode 100644 htdocs/core/class/html.formcompany.class.php diff --git a/htdocs/comm/action/fiche.php b/htdocs/comm/action/fiche.php index 90c2c91a6eb..11652613242 100644 --- a/htdocs/comm/action/fiche.php +++ b/htdocs/comm/action/fiche.php @@ -32,7 +32,7 @@ require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); require_once(DOL_DOCUMENT_ROOT."/user/class/user.class.php"); require_once(DOL_DOCUMENT_ROOT."/comm/action/cactioncomm.class.php"); require_once(DOL_DOCUMENT_ROOT."/comm/action/actioncomm.class.php"); -require_once(DOL_DOCUMENT_ROOT."/html.formactions.class.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formactions.class.php"); require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); require_once(DOL_DOCUMENT_ROOT."/lib/project.lib.php"); diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index c2e028d3175..30f17e746aa 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -2003,7 +2003,7 @@ if ($id > 0 || ! empty($ref)) print ''; // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/html.formactions.class.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); $formactions=new FormActions($db); $somethingshown=$formactions->showactions($propal,'propal',$socid); diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index ae8b55f4fb1..aaa12fd902a 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -2259,7 +2259,7 @@ else print ''; // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/html.formactions.class.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); $formactions=new FormActions($db); $somethingshown=$formactions->showactions($commande,'order',$socid); diff --git a/htdocs/compta/commande/fiche.php b/htdocs/compta/commande/fiche.php index 6779667564c..7775f208413 100644 --- a/htdocs/compta/commande/fiche.php +++ b/htdocs/compta/commande/fiche.php @@ -592,7 +592,7 @@ if ($id > 0 || ! empty($ref)) print ''; // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/html.formactions.class.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); $formactions=new FormActions($db); $somethingshown=$formactions->showactions($commande,'order',$socid); diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 75d7e19370e..33a63020cd0 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -3387,7 +3387,7 @@ else print '
'; // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/html.formactions.class.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); $formactions=new FormActions($db); $somethingshown=$formactions->showactions($fac,'invoice',$socid); diff --git a/htdocs/compta/propal.php b/htdocs/compta/propal.php index 835c13ac2dc..3858083b65b 100644 --- a/htdocs/compta/propal.php +++ b/htdocs/compta/propal.php @@ -546,7 +546,7 @@ if ($id > 0 || ! empty($ref)) print ''; // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/html.formactions.class.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); $formactions=new FormActions($db); $somethingshown=$formactions->showactions($propal,'propal',$socid); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php new file mode 100644 index 00000000000..0656714ea61 --- /dev/null +++ b/htdocs/core/class/html.form.class.php @@ -0,0 +1,3081 @@ + + * Copyright (C) 2004-2009 Laurent Destailleur + * Copyright (C) 2004 Benoit Mortier + * Copyright (C) 2004 Sebastien Di Cintio + * Copyright (C) 2004 Eric Seigne + * Copyright (C) 2005-2010 Regis Houssin + * Copyright (C) 2006 Andre Cianfarani + * Copyright (C) 2006 Marc Barilley/Ocebo + * Copyright (C) 2007 Franky Van Liedekerke + * Copyright (C) 2007 Patrick Raguin + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + * \file htdocs/html.form.class.php + * \brief Fichier de la classe des fonctions predefinie de composants html + * \version $Id$ + */ + + +/** + * \class Form + * \brief Classe permettant la generation de composants html + * \remarks Only common components must be here. + */ +class Form +{ + var $db; + var $error; + + // Cache arrays + var $cache_types_paiements=array(); + var $cache_conditions_paiements=array(); + + var $tva_taux_value; + var $tva_taux_libelle; + + + /** + * \brief Constructor + * \param DB Database handler + */ + function Form($DB) + { + $this->db = $DB; + + return 1; + } + + /** + * \brief Output key field for an editable field + * \param text Text of label + * \param htmlname Name of select field + * \param preselected Preselected value for parameter + * \param paramkey Key of parameter (unique if there is several parameter to show) + * \param perm Permission to allow button to edit parameter + * \param typeofdata Type of data (string by default, email, ...) + */ + function editfieldkey($text,$htmlname,$preselected,$paramkey,$paramvalue,$perm,$typeofdata='string') + { + global $langs; + $ret=''; + $ret.=''; + if ($_GET['action'] != 'edit'.$htmlname && $perm) $ret.=''; + $ret.='
'; + $ret.=$langs->trans($text); + $ret.=''.img_edit($langs->trans('Edit'),1).'
'; + return $ret; + } + + /** + * \brief Output val field for an editable field + * \param text Text of label (not used in this function) + * \param htmlname Name of select field + * \param preselected Preselected value for parameter + * \param paramkey Key of parameter (unique if there is several parameter to show) + * \param perm Permission to allow button to edit parameter + * \param typeofdata Type of data (string by default, email, ...) + */ + function editfieldval($text,$htmlname,$preselected,$paramkey,$paramvalue,$perm,$typeofdata='string') + { + global $langs; + $ret=''; + if ($_GET['action'] == 'edit'.$htmlname) + { + $ret.="\n"; + $ret.='
'; + $ret.=''; + $ret.=''; + $ret.=''; + $ret.=''; + $ret.=''; + $ret.=''; + $ret.='
'; + $ret.=''; + $ret.='
'."\n"; + $ret.='
'."\n"; + } + else + { + if ($typeofdata == 'email') $ret.=dol_print_email($preselected,0,0,0,0,1); + else $ret.=$preselected; + } + return $ret; + } + + /** + * \brief Old version of textwithtooltip. Kept for backward compatibility with modules for 2.6. + * \deprecated + */ + function textwithhelp($text,$htmltext,$tooltipon=1) + { + return $this->textwithtooltip($text,$htmltext,$tooltipon); + } + + /** + * \brief Show a text and picto with tooltip on text or picto + * \param text Texte to show + * \param htmltext Contenu html du tooltip, code en Html / UTF8 + * \param tooltipon 1=tooltip sur texte, 2=tooltip sur picto, 3=tooltip sur les 2, 4=tooltip sur les 2 et force en Ajax + * \param direction -1=Le picto est avant, 0=pas de picto, 1=le picto est apres + * \param img Code img du picto + * \param i Numero of tooltip + * \param width Width of tooltip + * \param shiftX Shift of tooltip + * \return string Code html du tooltip (texte+picto) + * \remarks Use function textwithpicto if you can. + */ + function textwithtooltip($text,$htmltext,$tooltipon=1,$direction=0,$img='',$i=1,$width='200',$shiftX='10') + { + global $conf; + + if (! $htmltext) return $text; + + $paramfortooltiptext =''; + $paramfortooltippicto =''; + + // Sanitize tooltip + $htmltext=str_replace("\\","\\\\",$htmltext); + $htmltext=str_replace("'","\'",$htmltext); + $htmltext=str_replace("'","\'",$htmltext); + $htmltext=str_replace("\r","",$htmltext); + $htmltext=str_replace("
\n","
",$htmltext); + $htmltext=str_replace("\n","",$htmltext); + + if ($conf->use_javascript_ajax && $tooltipon == 4) + { + $s = '
'."\n"; + $s.= $text; + $s.= '
'."\n"; + $s.= ''."\n"; + $s.= ''."\n"; + } + else + { + if ($conf->use_javascript_ajax) + { + $htmltext=str_replace('"',""",$htmltext); + if ($tooltipon==1 || $tooltipon==3) + { + $paramfortooltiptext.=' onmouseover="showtip(\''.$htmltext.'\')"'; + $paramfortooltiptext.=' onMouseout="hidetip()"'; + } + if ($tooltipon==2 || $tooltipon==3) + { + $paramfortooltippicto.=' onmouseover="showtip(\''.$htmltext.'\')"'; + $paramfortooltippicto.=' onMouseout="hidetip()"'; + } + } + + $s=""; + $s.=''; + if ($direction > 0) + { + if ($text) + { + $s.=''.$text; + if ($direction) $s.=' '; + $s.=''; + } + if ($direction) $s.=''.$img.''; + } + else + { + if ($direction) $s.=''.$img.''; + if ($text) + { + $s.=''; + if ($direction) $s.=' '; + $s.=$text.''; + } + } + $s.='
'; + } + return $s; + } + + /** + * \brief Show a text with a picto and a tooltip on picto + * \param text Text to show + * \param htmltooltip Content of tooltip + * \param direction 1=Icon is after text, -1=Icon is before text + * \param type Type of picto (info, help, warning, superadmin...) + * \return string HTML code of text, picto, tooltip + */ + function textwithpicto($text,$htmltext,$direction=1,$type='help') + { + global $conf; + + if ("$type" == "0") $type='info'; // For backward compatibility + + $alt=''; + // If info or help with no javascript, show only text + if (empty($conf->use_javascript_ajax)) + { + if ($type == 'info' || $type == 'help') return $text; + else { $alt=$htmltext; $htmltext=''; } + } + // If info or help with smartphone, show only text + if (! empty($conf->browser->phone)) + { + if ($type == 'info' || $type == 'help') return $text; + } + // Info or help + if ($type == 'info') $img=img_help(0,$alt); + if ($type == 'help' || $type ==1) $img=img_help(1,$alt); + if ($type == 'superadmin') $img=img_redstar($alt); + // Warnings + if ($type == 'warning') $img=img_warning($alt); + + return $this->textwithtooltip($text,$htmltext,2,$direction,$img); + } + + + /** + * \brief Retourne la liste deroulante des pays actifs, dans la langue de l'utilisateur + * \param selected Id ou Code pays ou Libelle pays pre-selectionne + * \param htmlname Nom de la liste deroulante + * \param htmloption Options html sur le select + * \todo trier liste sur noms apres traduction plutot que avant + */ + function select_pays($selected='',$htmlname='pays_id',$htmloption='') + { + global $conf,$langs; + $langs->load("dict"); + + $sql = "SELECT rowid, code, libelle, active"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_pays"; + $sql.= " WHERE active = 1"; + // \TODO A virer + if ($conf->use_javascript_ajax && $conf->global->CODE_DE_TEST) + { + if (is_numeric($selected)) + { + $sql.= " AND rowid = ".$selected; + } + else + { + $sql.= " AND code = '".$selected."'"; + } + } + $sql.= " ORDER BY code ASC"; + + dol_syslog("Form::select_pays sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) + { + // \TODO A virer + if ($conf->use_javascript_ajax && $conf->global->CODE_DE_TEST) + { + $langs->load("companies"); + $obj = $this->db->fetch_object($resql); + $pays_id = $obj->rowid?$obj->rowid:''; + + // On applique un delai d'execution pour le bon fonctionnement + $mode_create = substr($htmloption,-9,6); + $mode_edit = substr($htmloption,-7,4); + $mode_company = substr($htmloption,-10,7); + if ($mode_create == 'create') + { + $htmloption = 'onChange="ac_delay(\'company_save_refresh_create()\',\'500\')"'; + } + else if ($mode_edit == 'edit') + { + $htmloption = 'onChange="ac_delay(\'company_save_refresh_edit()\',\'500\')"'; + } + else if ($mode_company == 'refresh') + { + $htmloption = 'onChange="ac_delay(\'company_save_refresh()\',\'500\')"'; + } + + print '
'; + if ($obj->rowid == 0) + { + print ''; + } + else + { + print ''; + } + + print ajax_indicator($htmlname,'working'); + print ajax_autocompleter($pays_id,'pays',DOL_URL_ROOT.'/societe/ajaxcountries.php',''); + } + else + { + print ''; + return 0; + } + } + else + { + dol_print_error($this->db); + return 1; + } + } + + + /** + * \brief Retourne la liste des types de comptes financiers + * \param selected Type pre-selectionne + * \param htmlname Nom champ formulaire + */ + function select_type_comptes_financiers($selected=1,$htmlname='type') + { + global $langs; + $langs->load("banks"); + + $type_available=array(0,1,2); + + print ''; + } + + + /** + * \brief Return list of social contributions + * \param selected Preselected type + * \param htmlname Name of field in form + * \param useempty Set to 1 if we want an empty value + * \param maxlen Max length of text in combo box + * \param help Add or not the admin help picto + */ + function select_type_socialcontrib($selected='',$htmlname='actioncode', $useempty=0, $maxlen=40, $help=1) + { + global $db,$langs,$user,$mysoc; + + $sql = "SELECT c.id, c.libelle as type"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_chargesociales as c"; + $sql.= " WHERE active = 1"; + $sql.= " AND fk_pays = ".$mysoc->pays_id; + $sql.= " ORDER BY c.libelle ASC"; + + dol_syslog("Form::select_type_socialcontrib sql=".$sql, LOG_DEBUG); + $resql=$db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + if ($num) + { + print ''; + if ($user->admin && $help) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + else + { + print $langs->trans("ErrorNoSocialContributionForSellerCountry",$mysoc->pays_code); + } + } + else + { + dol_print_error($db,$db->lasterror()); + } + } + + /** + * \brief Return list of types of lines (product or service) + * \param selected Preselected type + * \param htmlname Name of field in html form + * \param showempty Add an empty field + * \param hidetext Do not show label before combo box + * \param forceall Force to show products and services in combo list, whatever are activated modules + */ + function select_type_of_lines($selected='',$htmlname='type',$showempty=0,$hidetext=0,$forceall=0) + { + global $db,$langs,$user,$conf; + + // If product & services are enabled or both disabled. + if ($forceall || ($conf->produit->enabled && $conf->service->enabled) + || (empty($conf->produit->enabled) && empty($conf->service->enabled))) + { + if (empty($hidetext)) print $langs->trans("Type").': '; + print ''; + //if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + if (! $forceall && empty($conf->produit->enabled) && $conf->service->enabled) + { + print ''; + } + if (! $forceall && $conf->produit->enabled && empty($conf->service->enabled)) + { + print ''; + } + + } + + /** + * \brief Return list of types of notes + * \param selected Preselected type + * \param htmlname Name of field in form + * \param showempty Add an empty field + */ + function select_type_fees($selected='',$htmlname='type',$showempty=0) + { + global $db,$langs,$user; + $langs->load("trips"); + + print ''; + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + + /** + * \brief Output html form to select a third party + * \param selected Preselected type + * \param htmlname Name of field in form + * \param filter Optionnal filters criteras + * \param showempty Add an empty field + * \param showtype Show third party type in combolist (customer, prospect or supplier) + * \param forcecombo Force to use combo box + */ + function select_societes($selected='',$htmlname='socid',$filter='',$showempty=0, $showtype=0, $forcecombo=0) + { + global $conf,$user,$langs; + + // On recherche les societes + $sql = "SELECT s.rowid, s.nom, s.client, s.fournisseur, s.code_client, s.code_fournisseur"; + $sql.= " FROM ".MAIN_DB_PREFIX ."societe as s"; + if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + $sql.= " WHERE s.entity = ".$conf->entity; + if ($filter) $sql.= " AND ".$filter; + if (is_numeric($selected) && $conf->use_javascript_ajax && $conf->global->COMPANY_USE_SEARCH_TO_SELECT) $sql.= " AND s.rowid = ".$selected; + if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + $sql.= " ORDER BY nom ASC"; + + dol_syslog("Form::select_societes sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) + { + if ($conf->use_javascript_ajax && $conf->global->COMPANY_USE_SEARCH_TO_SELECT && ! $forcecombo) + { + $socid = 0; + if ($selected) + { + $obj = $this->db->fetch_object($resql); + $socid = $obj->rowid?$obj->rowid:''; + } + + // We call a page after a small delay when a new input has been selected + //$javaScript = "window.location=\'...\'"; + //$htmloption = 'onChange="ac_delay(\''.$javaScript.'\',\'500\')"'; + $htmloption=''; + + print "\n".''."\n"; + print ''; + print ''; + print ''; + print '
'; + if ($socid == 0) + { + //$langs->load("companies"); + print ''; + } + else + { + print ''; + } + print ajax_autocompleter(($socid?$socid:-1),$htmlname,DOL_URL_ROOT.'/societe/ajaxcompanies.php?filter='.urlencode($filter), ''); + print ''; + print ajax_indicator($htmlname,'working'); + print '
'; + } + else + { + print ''; + } + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Return HTML combo list of absolute discounts + * \param selected Id remise fixe pre-selectionnee + * \param htmlname Nom champ formulaire + * \param filter Criteres optionnels de filtre + * \param maxvalue Max value for lines that can be selected + * \return int Return number of qualifed lines in list + */ + function select_remises($selected='',$htmlname='remise_id',$filter='',$socid, $maxvalue=0) + { + global $langs,$conf; + + // On recherche les remises + $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; + $sql.= " re.description, re.fk_facture_source"; + $sql.= " FROM ".MAIN_DB_PREFIX ."societe_remise_except as re"; + $sql.= " WHERE fk_soc = ".$socid; + if ($filter) $sql.= " AND ".$filter; + $sql.= " ORDER BY re.description ASC"; + + dol_syslog("Form::select_remises sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) + { + print ''; + return $qualifiedlines; + } + else + { + dol_print_error($this->db); + return -1; + } + } + + + /** + * \brief Retourne la liste deroulante des contacts d'une societe donnee + * \param socid Id de la societe + * \param selected Id contact pre-selectionne + * \param htmlname Nom champ formulaire ('none' pour champ non editable) + * \param show_empty 0=liste sans valeur nulle, 1=ajoute valeur inconnue + * \param exclude Liste des id contacts a exclure + * \param limitto Disable answers that are not id in this array list + * \return int <0 if KO, Nb of contact in list if OK + */ + function select_contacts($socid,$selected='',$htmlname='contactid',$showempty=0,$exclude='',$limitto='') + { + // Permettre l'exclusion de contacts + if (is_array($exclude)) + { + $excludeContacts = implode("','",$exclude); + } + + // On recherche les societes + $sql = "SELECT s.rowid, s.name, s.firstname FROM"; + $sql.= " ".MAIN_DB_PREFIX ."socpeople as s"; + $sql.= " WHERE fk_soc=".$socid; + if (is_array($exclude) && $excludeContacts) $sql.= " AND s.rowid NOT IN ('".$excludeContacts."')"; + $sql.= " ORDER BY s.name ASC"; + + dol_syslog("Form::select_contacts sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) + { + $num=$this->db->num_rows($resql); + if ($num == 0) return 0; + + if ($htmlname != 'none') print ''; + } + return $num; + } + else + { + dol_print_error($this->db); + return -1; + } + } + + + /** + * \brief Return select list of users + * \param selected Id user preselected + * \param htmlname Field name in form + * \param show_empty 0=liste sans valeur nulle, 1=ajoute valeur inconnue + * \param exclude Array list of users id to exclude + * \param disabled If select list must be disabled + * \param include Array list of users id to include + * \param enableonly Array list of users id to be enabled. All other must be disabled + */ + function select_users($selected='',$htmlname='userid',$show_empty=0,$exclude='',$disabled=0,$include='',$enableonly='') + { + global $conf; + + // Permettre l'exclusion d'utilisateurs + if (is_array($exclude)) $excludeUsers = implode("','",$exclude); + // Permettre l'inclusion d'utilisateurs + if (is_array($include)) $includeUsers = implode("','",$include); + + // On recherche les utilisateurs + $sql = "SELECT u.rowid, u.name, u.firstname, u.login FROM"; + $sql.= " ".MAIN_DB_PREFIX ."user as u"; + $sql.= " WHERE u.entity IN (0,".$conf->entity.")"; + if (is_array($exclude) && $excludeUsers) $sql.= " AND u.rowid NOT IN ('".$excludeUsers."')"; + if (is_array($include) && $includeUsers) $sql.= " AND u.rowid IN ('".$includeUsers."')"; + $sql.= " ORDER BY u.name ASC"; + + dol_syslog("Form::select_users sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) + { + print ''; + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Return list of products for customer in Ajax if Ajax activated or go to select_produits_do + * \param selected Preselected products + * \param htmlname Name of HTML select + * \param filtertype Filter on product type (''=nofilter, 0=product, 1=service) + * \param limit Limit sur le nombre de lignes retournees + * \param price_level Level of price to show + * \param status -1=Return all products, 0=Products not on sell, 1=Products on sell + * \param finished 2=all, 1=finished, 0=raw material + */ + function select_produits($selected='',$htmlname='productid',$filtertype='',$limit=20,$price_level=0,$status=1,$finished=2) + { + global $langs,$conf; + + if ($conf->global->PRODUIT_USE_SEARCH_TO_SELECT) + { + if ($conf->global->MAIN_USE_JQUERY) + { + print ajax_autocompleter2('','keysearch',DOL_URL_ROOT.'/product/ajaxproducts.php','&price_level='.$price_level.'&type='.$filtertype.'&mode=1&status='.$status.'&finished='.$finished,''); + + print '
'; + print ''; + print ''; + print '
'; + } + else + { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + print $langs->trans("RefOrLabel").':'; + print ajax_indicator($htmlname,'working'); // Indicator is et here + print '
'; + print ajax_updater($htmlname,'keysearch',DOL_URL_ROOT.'/product/ajaxproducts.php','&price_level='.$price_level.'&type='.$filtertype.'&mode=1&status='.$status.'&finished='.$finished,''); // Indicator is '' to disable it as it is alreay output + print '
'; + } + } + else + { + $this->select_produits_do($selected,$htmlname,$filtertype,$limit,$price_level,'',$status,$finished); + } + } + + /** + * \brief Return list of products for a customer + * \param selected Preselected product + * \param htmlname Name of select html + * \param filtertype Filter on product type (''=nofilter, 0=product, 1=service) + * \param limit Limite sur le nombre de lignes retournees + * \param price_level Level of price to show + * \param ajaxkeysearch Filter on product if ajax is used + * \param status -1=Return all products, 0=Products not on sell, 1=Products on sell + */ + function select_produits_do($selected='',$htmlname='productid',$filtertype='',$limit=20,$price_level=0,$ajaxkeysearch='',$status=1,$finished=2) + { + global $langs,$conf,$user,$db; + + $sql = "SELECT "; + $sql.= " p.rowid, p.label, p.ref, p.fk_product_type, p.price, p.price_ttc, p.price_base_type, p.duration, p.stock"; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p "; + $sql.= " WHERE p.entity = ".$conf->entity; + if (!$user->rights->produit->hidden) $sql.=' AND (p.hidden=0 OR p.fk_product_type != 0)'; + if (!$user->rights->service->hidden) $sql.=' AND (p.hidden=0 OR p.fk_product_type != 1)'; + + if($finished == 0) + { + $sql.= " AND p.finished = ".$finished; + } + elseif($finished == 1) + { + $sql.= " AND p.finished = ".$finished; + if ($status >= 0) $sql.= " AND p.envente = ".$status; + } + elseif($status >= 0) + { + $sql.= " AND p.envente = ".$status; + } + if (strval($filtertype) != '') $sql.=" AND p.fk_product_type=".$filtertype; + if ($ajaxkeysearch && $ajaxkeysearch != '') $sql.=" AND (p.ref like '%".$ajaxkeysearch."%' OR p.label like '%".$ajaxkeysearch."%')"; + $sql.= $db->order("p.ref"); + $sql.= $db->plimit($limit); + + dol_syslog("Form::select_produits_do sql=".$sql, LOG_DEBUG); + $result=$this->db->query($sql); + if (! $result) dol_print_error($this->db); + + // Multilang : on construit une liste des traductions des produits listes + if ($conf->global->MAIN_MULTILANGS) + { + $sqld = "SELECT d.fk_product, d.label"; + $sqld.= " FROM ".MAIN_DB_PREFIX."product as p"; + $sqld.= ", ".MAIN_DB_PREFIX."product_lang as d"; + $sqld.= " WHERE d.fk_product = p.rowid"; + $sqld.= " AND p.entity = ".$conf->entity; + $sqld.= " AND p.envente = 1"; + $sqld.= " AND d.lang='". $langs->getDefaultLang() ."'"; + $sqld.= " ORDER BY p.ref"; + + dol_syslog("Form::select_produits_do sql=".$sql, LOG_DEBUG); + $resultd = $this->db->query($sqld); + } + + if ($result) + { + $num = $this->db->num_rows($result); + + if ($conf->use_javascript_ajax) + { + if (! $num) + { + print 'global->PRODUIT_USE_SEARCH_TO_SELECT) print ' onchange="publish_selvalue(this);"'; + print '>'; + print ''; + } + } + else + { + print ''; + + $this->db->free($result); + } + else + { + dol_print_error($db); + } + } + + /** + * \brief Return list of products for customer in Ajax if Ajax activated or go to select_produits_fournisseurs_do + * \param socid Id third party + * \param selected Preselected product + * \param htmlname Name of HTML Select + * \param filtertype Filter on product type (''=nofilter, 0=product, 1=service) + * \param filtre For a SQL filter + */ + function select_produits_fournisseurs($socid,$selected='',$htmlname='productid',$filtertype='',$filtre) + { + global $langs,$conf; + if ($conf->global->PRODUIT_USE_SEARCH_TO_SELECT) + { + print $langs->trans("RefOrLabel").' : '; + print ajax_updater($htmlname,'keysearch',DOL_URL_ROOT.'/product/ajaxproducts.php','&socid='.$socid.'&type='.$filtertype.'&mode=2','working'); + } + else + { + $this->select_produits_fournisseurs_do($socid,$selected,$htmlname,$filtertype,$filtre,''); + } + } + + /** + * \brief Retourne la liste des produits de fournisseurs + * \param socid Id societe fournisseur (0 pour aucun filtre) + * \param selected Produit pre-selectionne + * \param htmlname Nom de la zone select + * \param filtertype Filter on product type (''=nofilter, 0=product, 1=service) + * \param filtre Pour filtre sql + * \param ajaxkeysearch Filtre des produits si ajax est utilise + */ + function select_produits_fournisseurs_do($socid,$selected='',$htmlname='productid',$filtertype='',$filtre='',$ajaxkeysearch='') + { + global $langs,$conf; + + $langs->load('stocks'); + + $sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,"; + $sql.= " pf.ref_fourn,"; + $sql.= " pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,"; + $sql.= " s.nom"; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON pf.fk_soc = s.rowid"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pf.rowid = pfp.fk_product_fournisseur"; + $sql.= " WHERE p.entity = ".$conf->entity; + $sql.= " AND p.envente = 1"; + if ($socid) $sql.= " AND pf.fk_soc = ".$socid; + if (strval($filtertype) != '') $sql.=" AND p.fk_product_type=".$filtertype; + if (! empty($filtre)) $sql.=" ".$filtre; + if ($ajaxkeysearch && $ajaxkeysearch != '') $sql.=" AND (pf.ref_fourn like '%".$ajaxkeysearch."%' OR p.ref like '%".$ajaxkeysearch."%' OR p.label like '%".$ajaxkeysearch."%')"; + $sql.= " ORDER BY pf.ref_fourn DESC"; + + dol_syslog("Form::select_produits_fournisseurs_do sql=".$sql,LOG_DEBUG); + $result=$this->db->query($sql); + if ($result) + { + + $num = $this->db->num_rows($result); + + if ($conf->use_javascript_ajax) + { + if (! $num) + { + print ''; + print ''; + } + } + else + { + print ''; + + $this->db->free($result); + } + else + { + dol_print_error($db); + } + } + + /** + \brief Retourne la liste des tarifs fournisseurs pour un produit + \param productid Id product + */ + function select_product_fourn_price($productid,$htmlname='productfournpriceid') + { + global $langs,$conf; + + $langs->load('stocks'); + + $sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,"; + $sql.= " pf.ref_fourn,"; + $sql.= " pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,"; + $sql.= " s.nom"; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = pf.fk_soc"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pf.rowid = pfp.fk_product_fournisseur"; + $sql.= " WHERE p.envente = 1"; + $sql.= " AND s.fournisseur = 1"; + $sql.= " AND p.rowid = ".$productid; + $sql.= " ORDER BY s.nom, pf.ref_fourn DESC"; + + dol_syslog("Form::select_product_fourn_price sql=".$sql,LOG_DEBUG); + $result=$this->db->query($sql); + + if ($result) + { + $num = $this->db->num_rows($result); + + $form = ''; + + $this->db->free($result); + } + return $form; + } + else + { + dol_print_error($db); + } + } + + /** + * \brief Retourne la liste deroulante des adresses de livraison + * \param selected Id contact pre-selectionn + * \param htmlname Nom champ formulaire + */ + function select_adresse_livraison($selected='', $socid, $htmlname='adresse_livraison_id',$showempty=0) + { + // On recherche les utilisateurs + $sql = "SELECT a.rowid, a.label"; + $sql .= " FROM ".MAIN_DB_PREFIX ."societe_adresse_livraison as a"; + $sql .= " WHERE a.fk_societe = ".$socid; + $sql .= " ORDER BY a.label ASC"; + + dol_syslog("Form::select_adresse_livraison sql=".$sql); + if ($this->db->query($sql)) + { + print ''; + return $num; + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Charge dans cache la liste des conditions de paiements possibles + * \return int Nb lignes chargees, 0 si deja chargees, <0 si ko + */ + function load_cache_conditions_paiements() + { + global $langs; + + if (sizeof($this->cache_conditions_paiements)) return 0; // Cache deja charge + + $sql = "SELECT rowid, code, libelle"; + $sql.= " FROM ".MAIN_DB_PREFIX."cond_reglement"; + $sql.= " WHERE active=1"; + $sql.= " ORDER BY sortorder"; + dol_syslog('Form::load_cache_conditions_paiements sql='.$sql,LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + + // Si traduction existe, on l'utilise, sinon on prend le libelle par defaut + $libelle=($langs->trans("PaymentConditionShort".$obj->code)!=("PaymentConditionShort".$obj->code)?$langs->trans("PaymentConditionShort".$obj->code):($obj->libelle!='-'?$obj->libelle:'')); + $this->cache_conditions_paiements[$obj->rowid]['code'] =$obj->code; + $this->cache_conditions_paiements[$obj->rowid]['label']=$libelle; + $i++; + } + return 1; + } + else { + dol_print_error($this->db); + return -1; + } + } + + /** + * \brief Charge dans cache la liste des types de paiements possibles + * \return int Nb lignes chargees, 0 si deja chargees, <0 si ko + */ + function load_cache_types_paiements() + { + global $langs; + + if (sizeof($this->cache_types_paiements)) return 0; // Cache deja charge + + $sql = "SELECT id, code, libelle, type"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_paiement"; + $sql.= " WHERE active > 0"; + $sql.= " ORDER BY id"; + dol_syslog('Form::load_cache_types_paiements sql='.$sql,LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + + // Si traduction existe, on l'utilise, sinon on prend le libelle par defaut + $libelle=($langs->trans("PaymentTypeShort".$obj->code)!=("PaymentTypeShort".$obj->code)?$langs->trans("PaymentTypeShort".$obj->code):($obj->libelle!='-'?$obj->libelle:'')); + $this->cache_types_paiements[$obj->id]['code'] =$obj->code; + $this->cache_types_paiements[$obj->id]['label']=$libelle; + $this->cache_types_paiements[$obj->id]['type'] =$obj->type; + $i++; + } + return $num; + } + else { + dol_print_error($this->db); + return -1; + } + } + + + /** + * \brief Retourne la liste des types de paiements possibles + * \param selected Id du type de paiement pre-selectionne + * \param htmlname Nom de la zone select + * \param filtertype Pour filtre + * \param addempty Ajoute entree vide + */ + function select_conditions_paiements($selected='',$htmlname='condid',$filtertype=-1,$addempty=0) + { + global $langs,$user; + + $this->load_cache_conditions_paiements(); + + print ''; + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + + + /** + * \brief Retourne la liste des modes de paiements possibles + * \param selected Id du mode de paiement pre-selectionne + * \param htmlname Nom de la zone select + * \param filtertype Pour filtre + * \param format 0=id+libelle, 1=code+code, 2=code+libelle + * \param empty 1=peut etre vide, 0 sinon + * \param noadmininfo 0=Add admin info, 1=Disable admin info + */ + function select_types_paiements($selected='',$htmlname='paiementtype',$filtertype='',$format=0, $empty=0, $noadmininfo=0) + { + global $langs,$user; + + dol_syslog("Form::select_type_paiements $selected, $htmlname, $filtertype, $format",LOG_DEBUG); + + $filterarray=array(); + if ($filtertype == 'CRDT') $filterarray=array(0,2); + elseif ($filtertype == 'DBIT') $filterarray=array(1,2); + elseif ($filtertype != '' && $filtertype != '-1') $filterarray=explode(',',$filtertype); + + $this->load_cache_types_paiements(); + + print ''; + if ($user->admin && ! $noadmininfo) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + + /** + * \brief Selection HT ou TTC + * \param selected Id pre-selectionne + * \param htmlname Nom de la zone select + */ + function select_PriceBaseType($selected='',$htmlname='price_base_type') + { + print $this->load_PriceBaseType($selected,$htmlname); + } + + /** + * \brief Selection HT ou TTC + * \param selected Id pre-selectionne + * \param htmlname Nom de la zone select + */ + function load_PriceBaseType($selected='',$htmlname='price_base_type') + { + global $langs; + + $return=''; + + $return.= ''; + + return $return; + } + + /** + * \brief Retourne la liste deroulante des differents etats d'une propal. + * Les valeurs de la liste sont les id de la table c_propalst + * \param selected etat pre-selectionne + */ + function select_propal_statut($selected='') + { + $sql = "SELECT id, code, label, active FROM ".MAIN_DB_PREFIX."c_propalst"; + $sql .= " WHERE active = 1"; + + dol_syslog("Form::select_propal_statut sql=".$sql); + if ($this->db->query($sql)) + { + print ''; + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Retourne la liste des comptes + * \param selected Id compte pre-selectionne + * \param htmlname Nom de la zone select + * \param statut Statut des comptes recherches (0=open, 1=closed) + * \param filtre Pour filtre sur la liste + * \param useempty Affiche valeur vide dans liste + */ + function select_comptes($selected='',$htmlname='accountid',$statut=0,$filtre='',$useempty=0) + { + global $langs, $conf; + + $langs->load("admin"); + + $sql = "SELECT rowid, label, bank"; + $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; + $sql.= " WHERE clos = '".$statut."'"; + $sql.= " AND entity = ".$conf->entity; + if ($filtre) $sql.=" AND ".$filtre; + $sql.= " ORDER BY rowid"; + + dol_syslog("Form::select_comptes sql=".$sql); + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $i = 0; + if ($num) + { + print '"; + } + else + { + print $langs->trans("NoActiveBankAccountDefined"); + } + } + else { + dol_print_error($this->db); + } + } + + /** + * \brief Retourne la liste des categories du type choisi + * \param type Type de categories (0=produit, 1=fournisseur, 2=client) + * \param selected Id categorie preselectionnee + * \param select_name Nom formulaire HTML + */ + function select_all_categories($type,$selected='',$select_name="",$maxlength=64) + { + global $langs; + $langs->load("categories"); + + if ($select_name=="") $select_name="catMere"; + + $cat = new Categorie($this->db); + $cate_arbo = $cat->get_full_arbo($type); + + $output = ''; + $output.= "\n"; + return $output; + } + + + /** + * \brief Show a confirmation HTML form or AJAX popup + * \param page page Url of page to call if confirmation is OK + * \param title title + * \param question question + * \param action action + * \param formquestion an array with forms complementary inputs + * \param selectedchoice "" or "no" or "yes" + * \param useajax 0=No, 1=Yes, 2=Yes but submit page with &confirm=no if choice is No + * \param string 'ajax' if a confirm ajax popup is shown, 'html' if it's an html form + */ + function form_confirm($page, $title, $question, $action, $formquestion='', $selectedchoice="", $useajax=0) + { + global $langs,$conf; + + $more=''; + if ($formquestion) + { + $more.=''."\n"; + $more.=''."\n"; + $more.=''."\n"; + foreach ($formquestion as $key => $input) + { + if ($input['type'] == 'text') + { + $more.=''."\n"; + } + if ($input['type'] == 'select') + { + $more.=''."\n"; + } + if ($input['type'] == 'checkbox') + { + $more.=''; + //$more.=''; + if ($i==0) $more.=''; + else $more.=''; + $more.='
'.$formquestion['text'].'
'.$input['label'].'
'; + $more.=$this->selectarray($input['name'],$input['values'],'',1); + $more.='
'.$input['label'].'  '; + $more.=''.$input['label'].' '; + $more.=' $selval) + { + $more.='
'.$input['label'].' \n"; + + if ($useajax && $conf->use_javascript_ajax && $conf->global->MAIN_CONFIRM_AJAX) + { + $pageyes=$page.'&action='.$action.'&confirm=yes'; + $pageno=($useajax == 2?$page.'&confirm=no':''); + // Note: Title is not used by dialogConfirm function + print ''; +// print ''; + + print "\n"; + $ret='ajax'; + } + else + { + print '
'."\n"; + print ''; + print ''."\n"; + + print ''."\n"; + + // Ligne titre + print ''."\n"; + + // Ligne formulaire + print $more; + + // Ligne message + print ''; + print ''; + print ''; + print ''; + print ''."\n"; + + print '
'.img_picto('','recent').' '.$title.'
'.$question.''; + $newselectedchoice=empty($selectedchoice)?"no":$selectedchoice; + print $this->selectyesno("confirm",$newselectedchoice); + print '
'."\n"; + + if (is_array($formquestion)) + { + foreach ($formquestion as $key => $input) + { + if ($input['type'] == 'hidden') print ''; + } + } + + print "
\n"; + $ret='html'; + } + + print "\n"; + return $ret; + } + + + /** + * \brief Affiche formulaire de selection de projet + * \param page Page + * \param socid Id societe + * \param selected Id projet pre-selectionne + * \param htmlname Nom du formulaire select + */ + function form_project($page, $socid, $selected='', $htmlname='projectid') + { + global $langs; + + require_once(DOL_DOCUMENT_ROOT."/lib/project.lib.php"); + + $langs->load("project"); + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + select_projects($socid,$selected,$htmlname); + print '
'; + } + else + { + if ($selected) { + $projet = new Project($this->db); + $projet->fetch($selected); + //print ''.$projet->title.''; + print $projet->getNomUrl(0); + } else { + print " "; + } + } + } + + /** + * \brief Affiche formulaire de selection de conditions de paiement + * \param page Page + * \param selected Id condition pre-selectionne + * \param htmlname Name of select html field + * \param addempty Ajoute entree vide + */ + function form_conditions_reglement($page, $selected='', $htmlname='cond_reglement_id', $addempty=0) + { + global $langs; + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + $this->select_conditions_paiements($selected,$htmlname,-1,$addempty); + print '
'; + } + else + { + if ($selected) + { + $this->load_cache_conditions_paiements(); + print $this->cache_conditions_paiements[$selected]['label']; + } else { + print " "; + } + } + } + + + /** + * \brief Affiche formulaire de selection d'une date + * \param page Page + * \param selected Date preselected + * \param htmlname Name of input html field + */ + function form_date($page, $selected='', $htmlname) + { + global $langs; + + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + print $this->select_date($selected,$htmlname,0,0,1,'form'.$htmlname); + print '
'; + } + else + { + if ($selected) + { + $this->load_cache_types_paiements(); + print $this->cache_types_paiements[$selected]['label']; + } else { + print " "; + } + } + } + + + /** + * \brief Affiche formulaire de selection d'un utilisateur + * \param page Page + * \param selected Id of user preselected + * \param htmlname Name of input html field + * \param exclude List of users id to exclude + * \param include List of users id to include + */ + function form_users($page, $selected='', $htmlname='userid', $exclude='', $include='') + { + global $langs; + + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + print $this->select_users($selected,$htmlname,1,$exclude,0,$include); + print '
'; + } + else + { + if ($selected) + { + require_once(DOL_DOCUMENT_ROOT ."/user/class/user.class.php"); + //$this->load_cache_contacts(); + //print $this->cache_contacts[$selected]; + $theuser=new User($this->db); + $theuser->fetch($selected); + print $theuser->getNomUrl(1); + } else { + print " "; + } + } + } + + + /** + * \brief Affiche formulaire de selection des modes de reglement + * \param page Page + * \param selected Id mode pre-selectionne + * \param htmlname Name of select html field + */ + function form_modes_reglement($page, $selected='', $htmlname='mode_reglement_id') + { + global $langs; + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + $this->select_types_paiements($selected,$htmlname); + print '
'; + } + else + { + if ($selected) + { + $this->load_cache_types_paiements(); + print $this->cache_types_paiements[$selected]['label']; + } else { + print " "; + } + } + } + + + /** + * \brief Affiche formulaire de selection de la remise fixe + * \param page Page URL where form is shown + * \param selected Value pre-selected + * \param htmlname Nom du formulaire select. Si none, non modifiable + * \param socid Third party id + * \param amount Total amount available + * \param filter SQL filter on discounts + * \param maxvalue Max value for lines that can be selected + */ + function form_remise_dispo($page, $selected='', $htmlname='remise_id',$socid, $amount, $filter='', $maxvalue=0) + { + global $conf,$langs; + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + if (! $filter || $filter=='fk_facture_source IS NULL') print $langs->trans("CompanyHasAbsoluteDiscount",price($amount),$langs->transnoentities("Currency".$conf->monnaie)).': '; + else print $langs->trans("CompanyHasCreditNote",price($amount),$langs->transnoentities("Currency".$conf->monnaie)).': '; + // print $langs->trans("AvailableGlobalDiscounts").': '; + $newfilter='fk_facture IS NULL AND fk_facture_line IS NULL'; // Remises disponibles + if ($filter) $newfilter.=' AND '.$filter; + $nbqualifiedlines=$this->select_remises('',$htmlname,$newfilter,$socid,$maxvalue); + print ''; + if ($nbqualifiedlines > 0) + { + print '   trans("UseCredit"); + print '" title="'.$langs->trans("UseCreditNoteInInvoicePayment").'">'; + } + print '
'; + } + else + { + if ($selected) + { + print $selected; + } + else + { + print "0"; + } + } + } + + + /** + * \brief Affiche formulaire de selection des contacts + * \param page Page + * \param selected Id contact pre-selectionne + * \param htmlname Nom du formulaire select + */ + function form_contacts($page, $societe, $selected='', $htmlname='contactidp') + { + global $langs; + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + $num=$this->select_contacts($societe->id, $selected, $htmlname); + if ($num==0) + { + print 'Cette societe n\'a pas de contact, veuillez en cr�er un avant de faire votre proposition commerciale
'; + print ''.$langs->trans('AddContact').''; + } + print '
'; + } + else + { + if ($selected) + { + require_once(DOL_DOCUMENT_ROOT ."/contact/class/contact.class.php"); + //$this->load_cache_contacts(); + //print $this->cache_contacts[$selected]; + $contact=new Contact($this->db); + $contact->fetch($selected); + print $contact->nom.' '.$contact->prenom; + } else { + print " "; + } + } + } + + /** + * \brief Affiche formulaire de selection de l'adresse de livraison + * \param page Page + * \param selected Id condition pre-selectionne + * \param htmlname Nom du formulaire select + * \param origin Origine de l'appel pour pouvoir creer un retour + * \param originid Id de l'origine + */ + function form_adresse_livraison($page, $selected='', $socid, $htmlname='adresse_livraison_id', $origin='', $originid='') + { + global $langs,$conf; + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + $this->select_adresse_livraison($selected, $socid, $htmlname, 1); + print ''; + $langs->load("companies"); + print '   '.$langs->trans("AddAddress").''; + print '
'; + } + else + { + if ($selected) + { + require_once(DOL_DOCUMENT_ROOT ."/comm/class/adresse_livraison.class.php"); + $livraison=new AdresseLivraison($this->db); + $result=$livraison->fetch_adresse($selected); + print ''.$livraison->label.''; + } + else + { + print " "; + } + } + } + + /** + * \brief Retourne la liste des devises, dans la langue de l'utilisateur + * \param selected code devise pre-selectionne + * \param htmlname nom de la liste deroulante + * \todo trier liste sur noms apres traduction plutot que avant + */ + function select_currency($selected='',$htmlname='currency_id') + { + global $conf,$langs,$user; + $langs->load("dict"); + + if ($selected=='euro' || $selected=='euros') $selected='EUR'; // Pour compatibilite + + $sql = "SELECT code, code_iso, label, active"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_currencies"; + $sql.= " WHERE active = 1"; + $sql.= " ORDER BY code_iso ASC"; + + $resql=$this->db->query($sql); + if ($resql) + { + print ''; + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + return 0; + } + else { + dol_print_error($this->db); + return 1; + } + } + + /** + * \brief Output an HTML select vat rate + * \param name Nom champ html + * \param selectedrate Forcage du taux tva pre-selectionne. Mettre '' pour aucun forcage. + * \param societe_vendeuse Objet societe vendeuse + * \param societe_acheteuse Objet societe acheteuse + * \param taux_produit Taux par defaut du produit vendu + * \param info_bits Miscellanous information on line + * \remarks Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle. + * Si le (pays vendeur = pays acheteur) alors la TVA par defaut=TVA du produit vendu. Fin de regle. + * Si (vendeur et acheteur dans Communaute europeenne) et bien vendu = moyen de transports neuf (auto, bateau, avion), TVA par defaut=0 (La TVA doit etre paye par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de regle. + * Si (vendeur et acheteur dans Communaute europeenne) et bien vendu autre que transport neuf alors la TVA par defaut=TVA du produit vendu. Fin de regle. + * Sinon la TVA proposee par defaut=0. Fin de regle. + */ + function select_tva($name='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='', $info_bits=0) + { + print $this->load_tva($name, $selectedrate, $societe_vendeuse, $societe_acheteuse, $taux_produit, $info_bits); + } + + + /** + * \brief Output an HTML select vat rate + * \param name Nom champ html + * \param selectedrate Forcage du taux tva pre-selectionne. Mettre '' pour aucun forcage. + * \param societe_vendeuse Objet societe vendeuse + * \param societe_acheteuse Objet societe acheteuse + * \param taux_produit Taux par defaut du produit vendu + * \param info_bits Miscellanous information on line + * \remarks Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle. + * Si le (pays vendeur = pays acheteur) alors la TVA par defaut=TVA du produit vendu. Fin de regle. + * Si (vendeur et acheteur dans Communaute europeenne) et bien vendu = moyen de transports neuf (auto, bateau, avion), TVA par defaut=0 (La TVA doit etre paye par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de regle. + * Si (vendeur et acheteur dans Communaute europeenne) et bien vendu autre que transport neuf alors la TVA par defaut=TVA du produit vendu. Fin de regle. + * Sinon la TVA proposee par defaut=0. Fin de regle. + */ + function load_tva($name='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='', $info_bits=0) + { + global $langs,$conf,$mysoc; + + $return=''; + + $txtva=array(); + $libtva=array(); + $nprtva=array(); + + // Define defaultnpr and defaultttx + $defaultnpr=($info_bits & 0x01); + $defaultnpr=(preg_match('/\*/',$selectedrate) ? 1 : $defaultnpr); + $defaulttx=str_replace('*','',$selectedrate); + + //print $societe_vendeuse."-".$societe_acheteuse; + if (is_object($societe_vendeuse) && ! $societe_vendeuse->pays_code) + { + if ($societe_vendeuse->id == $mysoc->id) + { + $return.= ''.$langs->trans("ErrorYourCountryIsNotDefined").''; + } + else + { + $return.= ''.$langs->trans("ErrorSupplierCountryIsNotDefined").''; + } + return $return; + } + + if (is_object($societe_vendeuse)) + { + if ($societe_vendeuse->isInEEC() && (! empty($societe_vendeuse->tva_intra)) + && preg_match('/^([A-Z][A-Z])/',$societe_vendeuse->tva_intra,$reg)) + { + $code_pays=$reg[1]; + } + else + { + $code_pays=$societe_vendeuse->pays_code; + } + } + else + { + $code_pays=$mysoc->pays_code; // Pour compatibilite ascendente + } + + // Recherche liste des codes TVA du pays vendeur + $sql = "SELECT t.taux,t.recuperableonly"; + $sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_pays as p"; + $sql .= " WHERE t.fk_pays = p.rowid AND p.code = '".$code_pays."'"; + $sql .= " AND t.active = 1"; + $sql .= " ORDER BY t.taux ASC, t.recuperableonly ASC"; + + $resql=$this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + if ($num) + { + for ($i = 0; $i < $num; $i++) + { + $obj = $this->db->fetch_object($resql); + $txtva[$i] = $obj->taux; + $libtva[$i] = $obj->taux.'%'; + $nprtva[$i] = $obj->recuperableonly; + } + } + else + { + $return.= ''.$langs->trans("ErrorNoVATRateDefinedForSellerCountry",$code_pays).''; + } + } + else + { + $return.= ''.$this->db->error().''; + } + + // Definition du taux a pre-selectionner (si defaulttx non force et donc vaut -1 ou '') + if ($defaulttx < 0 || strlen($defaulttx) == 0) + { + $defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$taux_produit); + $defaultnpr=get_default_npr($societe_vendeuse,$societe_acheteuse,$taux_produit); + } + // Si taux par defaut n'a pu etre determine, on prend dernier de la liste. + // Comme ils sont tries par ordre croissant, dernier = plus eleve = taux courant + if ($defaulttx < 0 || strlen($defaulttx) == 0) + { + $defaulttx = $txtva[sizeof($txtva)-1]; + } + + $nbdetaux = sizeof($txtva); + + if (sizeof($txtva)) + { + $return.= ''; + } + + return $return; + } + + + /** + * Affiche zone de selection de date + * Liste deroulante pour les jours, mois, annee et eventuellement heurs et minutes + * Les champs sont pre-selectionnes avec: + * - La date set_time (Local PHP server timestamps ou date au format YYYY-MM-DD ou YYYY-MM-DD HH:MM) + * - La date local du server PHP si set_time vaut '' + * - Aucune date (champs vides) si set_time vaut -1 (dans ce cas empty doit valoir 1) + * @param set_time Pre-selected date (must be a local PHP server timestamp) + * @param prefix Prefix pour nom champ + * @param h 1=Affiche aussi les heures + * @param m 1=Affiche aussi les minutes + * @param empty 0=Champ obligatoire, 1=Permet une saisie vide + * @param form_name Nom du formulaire de provenance. Utilise pour les dates en popup. + * @param d 1=Affiche aussi les jours, mois, annees + * @param addnowbutton Add a button "Now" + * @param nooutput Do not output zone but return it + * @return nothing or string if nooutput is 1 + */ + function select_date($set_time='', $prefix='re', $h=0, $m=0, $empty=0, $form_name="", $d=1, $addnowbutton=0, $nooutput=0) + { + global $conf,$langs; + + $retstring=''; + + if($prefix=='') $prefix='re'; + if($h == '') $h=0; + if($m == '') $m=0; + if($empty == '') $empty=0; + + if (! $set_time && $empty == 0) $set_time = time(); + + // Analyse de la date de pre-selection + if (preg_match('/^([0-9]+)\-([0-9]+)\-([0-9]+)\s?([0-9]+)?:?([0-9]+)?/',$set_time,$reg)) + { + // Date au format 'YYYY-MM-DD' ou 'YYYY-MM-DD HH:MM:SS' + $syear = $reg[1]; + $smonth = $reg[2]; + $sday = $reg[3]; + $shour = $reg[4]; + $smin = $reg[5]; + } + elseif (strval($set_time) != '' && $set_time != -1) + { + // set_time est un timestamps (0 possible) + $syear = dol_print_date($set_time, "%Y"); + $smonth = dol_print_date($set_time, "%m"); + $sday = dol_print_date($set_time, "%d"); + $shour = dol_print_date($set_time, "%H"); + $smin = dol_print_date($set_time, "%M"); + } + else + { + // Date est '' ou vaut -1 + $syear = ''; + $smonth = ''; + $sday = ''; + $shour = ''; + $smin = ''; + } + + if ($d) + { + /* + * Affiche date en popup + */ + if ($conf->use_javascript_ajax && $conf->use_popup_calendar) + { + //print "e".$set_time." t ".$conf->format_date_short; + if (strval($set_time) != '' && $set_time != -1) + { + $formated_date=dol_print_date($set_time,$conf->format_date_short); + } + + // Calendrier popup version eldy + if ("$conf->use_popup_calendar" == "eldy") // Laisser conf->use_popup_calendar entre quote + { + // Zone de saisie manuelle de la date + $retstring.='format_date_short_java.'\'); "'; + $retstring.='>'; + + // Icone calendrier + $retstring.=''; + + $retstring.=''."\n"; + $retstring.=''."\n"; + $retstring.=''."\n"; + } + else + { + // Calendrier popup version defaut + if ($langs->defaultlang != "") + { + $retstring.=''; + } + $retstring.=''; + $retstring.='format_date_short_java.'\')"'; + $retstring.='> '; + $retstring.=''."\n"; + $retstring.=''."\n"; + $retstring.=''."\n"; + if ($form_name =="") + { + $retstring.=''; + $retstring.=''; + $retstring.=''; + } + else + { + $retstring.=''; + $retstring.=''; + $retstring.=''; + } + } + } + + /* + * Affiche date en select + */ + if (! $conf->use_javascript_ajax || ! $conf->use_popup_calendar) + { + // Jour + $retstring.='"; + + $retstring.='"; + + // Year + if ($empty || $set_time == -1) + { + $retstring.=''; + } + else + { + $retstring.='\n"; + } + } + } + + if ($d && $h) $retstring.=' '; + + if ($h) + { + /* + * Affiche heure en select + */ + $retstring.='"; + $retstring.="H\n"; + } + + if ($m) + { + /* + * Affiche min en select + */ + $retstring.='"; + $retstring.="M\n"; + } + + // Added by Matelli http://matelli.fr/showcases/patchs-dolibarr/update-date-input-in-action-form.html) + // "Now" button + if ($conf->use_javascript_ajax && $addnowbutton) + { + // Script which will be inserted in the OnClick of the "Now" button + $reset_scripts = ""; + + // Generate the date part, depending on the use or not of the javascript calendar + if ($conf->use_popup_calendar) + { + $base=DOL_URL_ROOT.'/lib/'; + $reset_scripts .= 'resetDP(\''.$base.'\',\''.$prefix.'\',\''.$conf->format_date_short_java.'\');'; + } + else + { + $reset_scripts .= 'this.form.elements[\''.$prefix.'day\'].value=formatDate(new Date(), \'d\'); '; + $reset_scripts .= 'this.form.elements[\''.$prefix.'month\'].value=formatDate(new Date(), \'M\'); '; + $reset_scripts .= 'this.form.elements[\''.$prefix.'year\'].value=formatDate(new Date(), \'yyyy\'); '; + } + // Generate the hour part + if ($h) + { + $reset_scripts .= 'this.form.elements[\''.$prefix.'hour\'].value=formatDate(new Date(), \'HH\'); '; + } + // Generate the minute part + if ($m) + { + $reset_scripts .= 'this.form.elements[\''.$prefix.'min\'].value=formatDate(new Date(), \'mm\'); '; + } + // If reset_scripts is not empty, print the button with the reset_scripts in OnClick + if ($reset_scripts) + { + $retstring.=' '; + } + } + + if (! empty($nooutput)) return $retstring; + + print $retstring; + return; + } + + /** + * \brief Function to show a form to select a duration on a page + * \param prefix prefix + * \param iSecond Default preselected duration (number of seconds) + * \param disabled Disable the combo box + */ + function select_duration($prefix,$iSecond='',$disabled=0) + { + if ($iSecond) + { + require_once(DOL_DOCUMENT_ROOT."/lib/date.lib.php"); + + $hourSelected = ConvertSecondToTime($iSecond,'hour'); + $minSelected = ConvertSecondToTime($iSecond,'min'); + } + + print '"; + print "H  "; + print '"; + print "M "; + } + + + /** + * \brief Show a select form from an array + * \param htmlname Nom de la zone select + * \param array Tableau de key+valeur + * \param id Preselected key + * \param show_empty 1 si il faut ajouter une valeur vide dans la liste, 0 sinon + * \param key_in_label 1 pour afficher la key dans la valeur "[key] value" + * \param value_as_key 1 to use value as key + * \param optionType Type de l'option: 1 pour des fonctions javascript + * \param option Valeur de l'option en fonction du type choisi + * \param translate Traduire la valeur + * \param maxlen Length maximum for labels + * \return string HTML select string + */ + function selectarray($htmlname, $array, $id='', $show_empty=0, $key_in_label=0, $value_as_key=0, $optionType=0, $option='', $translate=0, $maxlen=0) + { + global $langs; + + $out=''; + + // \TODO Simplify optionType and option (only one should be necessary) + if ($optionType == 1 && $option != '') + { + $out.=''; + } + + if ($show_empty) + { + $out.=''."\n"; + } + + if (is_array($array)) + { + while (list($key, $value) = each ($array)) + { + $out.='\n"; + } + } + + $out.=""; + return $out; + } + + /** + * \brief Show a select form from an array + * \param htmlname Nom de la zone select + * \param array Tableau de key+valeur + * \param id Preselected key + * \param show_empty 1 si il faut ajouter une valeur vide dans la liste, 0 sinon + * \param key_in_label 1 pour afficher la key dans la valeur "[key] value" + * \param value_as_key 1 to use value as key + * \param optionType Type de l'option: 1 pour des fonctions javascript + * \param option Valeur de l'option en fonction du type choisi + * \param translate Traduire la valeur + * \param maxlen Length maximum for labels + * \deprecated Use selectarray instead + */ + function select_array($htmlname, $array, $id='', $show_empty=0, $key_in_label=0, $value_as_key=0, $optionType=0, $option='', $translate=0, $maxlen=0) + { + print $this->selectarray($htmlname, $array, $id, $show_empty, $key_in_label, $value_as_key, $optionType, $option, $translate, $maxlen); + } + + + /** + * \brief Return an html string with a select combo box to choose yes or no + * \param name Name of html select field + * \param value Pre-selected value + * \param option 0 return yes/no, 1 return 1/0 + * \return int or string See option + */ + function selectyesno($htmlname,$value='',$option=0) + { + global $langs; + + $yes="yes"; $no="no"; + + if ($option) + { + $yes="1"; + $no="0"; + } + + $resultyesno = ''."\n"; + return $resultyesno; + } + + + + /** + * \brief Retourne la liste des modeles d'export + * \param selected Id modele pre-selectionne + * \param htmlname Nom de la zone select + * \param type Type des modeles recherches + * \param useempty Affiche valeur vide dans liste + */ + function select_export_model($selected='',$htmlname='exportmodelid',$type='',$useempty=0) + { + + $sql = "SELECT rowid, label"; + $sql.= " FROM ".MAIN_DB_PREFIX."export_model"; + $sql.= " WHERE type = '".$type."'"; + $sql.= " ORDER BY rowid"; + $result = $this->db->query($sql); + if ($result) + { + print '"; + } + else { + dol_print_error($this->db); + } + } + + /** + * \brief Return HTML combo list of week + * \param selected Preselected value + * \param htmlname Nom de la zone select + * \param useempty Affiche valeur vide dans liste + * TODO Move into html.formother + */ + function select_dayofweek($selected='',$htmlname='weekid',$useempty=0) + { + global $langs; + + $week = array( 0=>$langs->trans("Day0"), + 1=>$langs->trans("Day1"), + 2=>$langs->trans("Day2"), + 3=>$langs->trans("Day3"), + 4=>$langs->trans("Day4"), + 5=>$langs->trans("Day5"), + 6=>$langs->trans("Day6")); + + $select_week = ''; + return $select_week; + } + + /** + * \brief Return HTML combo list of month + * \param selected Preselected value + * \param htmlname Nom de la zone select + * \param useempty Affiche valeur vide dans liste + * TODO Move into html.formother + */ + function select_month($selected='',$htmlname='monthid',$useempty=0) + { + $month = monthArrayOrSelected(-1); // Get array + + $select_month = ''; + return $select_month; + } + + /** + * \brief Return HTML combo list of years + * \param selected Preselected value + * \param htmlname Name of HTML select object + * \param useempty Affiche valeur vide dans liste + * \param $min_year Valeur minimum de l'annee dans la liste (par defaut annee courante -10) + * \param $max_year Valeur maximum de l'annee dans la liste (par defaut annee courante + 5) + * TODO Move into html.formother + */ + function select_year($selected='',$htmlname='yearid',$useempty=0, $min_year='', $max_year='') + { + if($max_year == '') + $max_year = date("Y") +5; + if($min_year == '') + $min_year = date("Y") - 10; + + print '\n"; + } + + /** + * \brief Affiche tableau avec ref et bouton navigation pour un objet metier + * \param object Object to show + * \param paramid Nom du parametre a utiliser pour nommer id dans liens URL + * \param morehtml Code html supplementaire a afficher avant barre nav + * \param shownav Show Condition + * \param fieldid Nom du champ en base a utiliser pour select next et previous + * \param fieldref Nom du champ objet ref (object->ref) a utiliser pour select next et previous + * \param morehtmlref Code html supplementaire a afficher apres ref + * \param moreparam More param to ad in nav link url. + * \return string Portion HTML avec ref + boutons nav + */ + function showrefnav($object,$paramid,$morehtml='',$shownav=1,$fieldid='rowid',$fieldref='ref',$morehtmlref='',$moreparam='') + { + $ret=''; + + //print "$paramid,$morehtml,$shownav,$fieldid,$fieldref,$morehtmlref,$moreparam"; + $object->load_previous_next_ref($object->next_prev_filter,$fieldid); + $previous_ref = $object->ref_previous?''.img_previous().'':''; + $next_ref = $object->ref_next?''.img_next().'':''; + + //print "xx".$previous_ref."x".$next_ref; + if ($previous_ref || $next_ref || $morehtml) { + $ret.=''; + $ret.='
'; + } + + $ret.=$object->$fieldref; + if ($morehtmlref) { + $ret.=' '.$morehtmlref; + } + + if ($morehtml) { + $ret.=''.$morehtml; + } + if ($shownav && ($previous_ref || $next_ref)) { + $ret.=''.$previous_ref.''.$next_ref; + } + if ($previous_ref || $next_ref || $morehtml) + { + $ret.='
'; + } + return $ret; + } + + + /** + * \brief Return HTML code to output a photo + * \param modulepart Id to define module concerned + * \param object Object containing data to retrieve file name + * \param width Width of photo + * \return string HTML code to output photo + */ + function showphoto($modulepart,$object,$width=100) + { + global $conf; + + $ret='';$dir='';$file='';$email=''; + + if ($modulepart=='userphoto') + { + $dir=$conf->user->dir_output; + $file=get_exdir($object->id,2).$object->photo; + $altfile=$object->id.".jpg"; // For backward compatibility + $email=$object->email; + } + if ($modulepart=='memberphoto') + { + $dir=$conf->adherent->dir_output; + $file=get_exdir($object->id,2).$object->photo; + $altfile=$object->id.".jpg"; // For backward compatibility + $email=$object->email; + } + + if ($dir && $file) + { + if (file_exists($dir."/".$file)) + { + $ret.='Photo'; + } + else if (file_exists($dir."/".$altfile)) + { + $ret.='Photo'; + } + else + { + if ($conf->gravatar->enabled) + { + global $dolibarr_main_url_root; + $ret.=''; + $ret.='Photo found on Gravatar'; + } + else + { + $ret.='No photo'; + } + } + } + else + { + dol_print_error('','Call to showrefnav with wrong parameters'); + } + + return $ret; + } +} + +?> diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php new file mode 100644 index 00000000000..616063b586d --- /dev/null +++ b/htdocs/core/class/html.formactions.class.php @@ -0,0 +1,177 @@ + + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + \file htdocs/html.formactions.class.php + \brief Fichier de la classe des fonctions predefinie de composants html actions + \version $Id$ +*/ + + +/** + \class FormActions + \brief Classe permettant la g�n�ration de composants html actions +*/ +class FormActions +{ + var $db; + var $error; + + + /** + * \brief Constructeur + * \param DB handler d'acc�s base de donn�e + */ + function FormActions($DB) + { + $this->db = $DB; + + return 1; + } + + + /** + * \brief Show list of action status + * \param formname Name of form where select in included + * \param selected Preselected value + * \param canedit 1=can edit, 0=read only + */ + function form_select_status_action($formname,$selected,$canedit=1) + { + global $langs,$conf; + + $listofstatus=array('0'=>$langs->trans("ActionRunningNotStarted"),'50'=>$langs->trans("ActionRunningShort"),'100'=>$langs->trans("ActionDoneShort")); + + if ($conf->use_javascript_ajax) + { + print "\n"; + print ''."\n"; + print ''; + if ($selected == 0 || $selected == 100) $canedit=0; + print ' %'; + print ' '; + } + else + { + print ' %'; + } + } + + + /** + * \brief Show list of actions for element + * \param object Object + * \param typeelement 'invoice','propal','order' + * \param socid socid of user + * \return int <0 if KO, >=0 if OK + */ + function showactions($object,$typeelement,$socid=0) + { + global $langs,$conf,$user; + global $bc; + + $sql = 'SELECT a.id, a.datep as da, a.label, a.note,'; + $sql.= ' u.login'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'actioncomm as a, '.MAIN_DB_PREFIX.'user as u'; + $sql.= ' WHERE a.fk_user_author = u.rowid'; + if ($socid) $sql .= ' AND a.fk_soc = '.$socid; + if ($typeelement == 'invoice') $sql.= ' AND a.fk_facture = '.$object->id; + if ($typeelement == 'propal') $sql.= ' AND a.propalrowid = '.$object->id; + if ($typeelement == 'order') $sql.= ' AND a.fk_commande = '.$object->id; + if ($typeelement == 'project') $sql.= ' AND a.fk_project = '.$object->id; + + dol_syslog("FormActions::showactions sql=".$sql); + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + if ($num) + { + if ($typeelement == 'invoice') $title=$langs->trans('ActionsOnBill'); + if ($typeelement == 'propal') $title=$langs->trans('ActionsOnPropal'); + if ($typeelement == 'order') $title=$langs->trans('ActionsOnOrder'); + if ($typeelement == 'project') $title=$langs->trans('ActionsOnProject'); + + print_titre($title); + + $i = 0; $total = 0; $var=true; + print ''; + print ''; + print "\n"; + + while ($i < $num) + { + $objp = $this->db->fetch_object($resql); + $var=!$var; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $i++; + } + print '
'.$langs->trans('Ref').''.$langs->trans('Date').''.$langs->trans('Action').''.$langs->trans('By').'
'.img_object($langs->trans('ShowTask'),'task').' '.$objp->id.''.dol_print_date($this->db->jdate($objp->da),'day').''.dol_trunc($objp->label,32).''.$objp->login.'
'; + } + + return $num; + } + else + { + dol_print_error($this->db); + return -1; + } + } + + + /** + * \brief Retourne la liste des types de comptes financiers + * \param selected Type pre-selectionne + * \param htmlname Nom champ formulaire + */ + function select_type_actions($selected='',$htmlname='actioncode') + { + global $langs,$user; + + require_once(DOL_DOCUMENT_ROOT."/comm/action/cactioncomm.class.php"); + require_once(DOL_DOCUMENT_ROOT."/core/class/html.form.class.php"); + $caction=new CActionComm($this->db); + $form=new Form($this->db); + + $arraylist=$caction->liste_array(1,'code'); + $arraylist[0]=' '; + asort($arraylist); + + $form->select_array($htmlname, $arraylist, $selected); + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + +} diff --git a/htdocs/core/class/html.formadmin.class.php b/htdocs/core/class/html.formadmin.class.php new file mode 100644 index 00000000000..c6f8b327779 --- /dev/null +++ b/htdocs/core/class/html.formadmin.class.php @@ -0,0 +1,293 @@ + + * Copyright (C) 2007 Patrick Raguin + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + * \file htdocs/html.formadmin.class.php + * \brief File of class for html functions for admin pages + * \version $Id$ + */ + + +/** + * \class FormAdmin + * \brief Class to generate html code for admin pages + */ +class FormAdmin +{ + var $db; + var $error; + + + /** + * \brief Constructor + * \param DB handler d'acces base de donnee + */ + function FormAdmin($DB) + { + $this->db = $DB; + + return 1; + } + + + /** + * \brief Retourne la liste deroulante des langues disponibles + * \param selected Langue pre-selectionnee + * \param htmlname Nom de la zone select + * \param showauto Affiche choix auto + * \param filter Array of keys to exclude in list + * \param showempty Add empty value + */ + function select_lang($selected='',$htmlname='lang_id',$showauto=0,$filter=0,$showempty=0) + { + global $langs; + + $langs_available=$langs->get_available_languages(DOL_DOCUMENT_ROOT,12); + + print ''; + } + + /** + * \brief Retourne la liste deroulante des menus disponibles (eldy_backoffice, ...) + * \param selected Menu pre-selectionnee + * \param htmlname Nom de la zone select + * \param dirmenu Repertoire a scanner + */ + function select_menu($selected='',$htmlname,$dirmenu) + { + global $langs,$conf; + + if ($selected == 'eldy.php') $selected='eldy_backoffice.php'; // Pour compatibilite + + $menuarray=array(); + $handle=opendir($dirmenu); + while (($file = readdir($handle))!==false) + { + if (is_file($dirmenu."/".$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS') + { + if (preg_match('/lib\.php$/i',$file)) continue; // We exclude library files + $filelib=preg_replace('/\.php$/i','',$file); + $prefix=''; + if (preg_match('/^eldy/i',$file)) $prefix='0'; // 0=Recommanded, 1=Experimental, 2=Other + else $prefix='2'; + + if ($file == $selected) + { + $menuarray[$prefix.'_'.$file]=''; + } + else + { + $menuarray[$prefix.'_'.$file]=''; + } + } + } + ksort($menuarray); + + // Affichage liste deroulante des menus + print ''; + } + + /** + * \brief Retourne la liste deroulante des menus disponibles + * \param selected Menu pre-selectionnee + * \param htmlname Nom de la zone select + * \param dirmenu Repertoire a scanner + */ + function select_menu_families($selected='',$htmlname,$dirmenu) + { + global $langs,$conf; + + $menuarray=array(); + $handle=opendir($dirmenu); + while (($file = readdir($handle))!==false) + { + if (is_file($dirmenu."/".$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS') + { + $filelib=preg_replace('/(_backoffice|_frontoffice)?\.php$/i','',$file); + if (preg_match('/^default/i',$filelib)) continue; + if (preg_match('/^empty/i',$filelib)) continue; + if (preg_match('/\.lib/i',$filelib)) continue; + + $menuarray[$filelib]=1; + } + $menuarray['all']=1; + } + ksort($menuarray); + + // Affichage liste deroulante des menus + print ''; + } + + + /** + * \brief Retourne la liste deroulante des menus disponibles (eldy) + * \param selected Menu pre-selectionnee + * \param htmlname Nom de la zone select + */ + function select_timezone($selected='',$htmlname) + { + global $langs,$conf; + + print ''; + } + + /** + * \brief Return colors list selector + * \param selected Color pre-selected + * \param htmlname Name of html select zone + */ + function select_colors($selected='', $htmlname, $arrayofcolors='', $showcolorbox=1) + { + global $langs,$conf; + + if (! is_array($arrayofcolors)) $arrayofcolors=array('29527A','5229A3','A32929','7A367A','B1365F','0D7813'); + + //$selected=''; + if ($showcolorbox) print '
'; + + print ''; + + if ($showcolorbox) + { + print ''; + print ''; + print ''; + print ''; + print '
'; + print '
'; + } + } +} + +?> diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php new file mode 100644 index 00000000000..267ffb3302b --- /dev/null +++ b/htdocs/core/class/html.formcompany.class.php @@ -0,0 +1,570 @@ + + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + * \file htdocs/html.formcompany.class.php + * \brief File of class to build HTML component for third parties management + * \version $Id$ + */ + + +/** + * \class FormCompany + * \brief Class to build HTML component for third parties management + * \remarks Only common components must be here. + */ +class FormCompany +{ + var $db; + var $error; + + + + /** + * \brief Constructeur + * \param DB handler d'acces base de donnee + */ + function FormCompany($DB) + { + $this->db = $DB; + + return 1; + } + + + /** + * \brief Renvoie la liste des libelles traduits des types actifs de societes + * \param mode 0=renvoi id+libelle, 1=renvoi code+libelle + * \return array tableau des types + */ + function typent_array($mode=0) + { + global $langs; + + $effs = array(); + + $sql = "SELECT id, code, libelle"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_typent"; + $sql.= " WHERE active = 1"; + $sql.= " ORDER by id"; + dol_syslog('Form::typent_array sql='.$sql,LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + + while ($i < $num) + { + $objp = $this->db->fetch_object($resql); + if (! $mode) $key=$objp->id; + else $key=$objp->code; + + if ($langs->trans($objp->code) != $objp->code) + $effs[$key] = $langs->trans($objp->code); + else + $effs[$key] = $objp->libelle!='-'?$objp->libelle:''; + $i++; + } + $this->db->free($resql); + } + + return $effs; + } + + /** + * \brief Renvoie la liste des types d'effectifs possibles (pas de traduction car nombre) + * \param mode 0=renvoi id+libelle, 1=renvoi code+libelle + * \return array tableau des types d'effectifs + */ + function effectif_array($mode=0) + { + $effs = array(); + + $sql = "SELECT id, code, libelle"; + $sql .= " FROM ".MAIN_DB_PREFIX."c_effectif"; + $sql.= " WHERE active = 1"; + $sql .= " ORDER BY id ASC"; + dol_syslog('Form::effectif_array sql='.$sql,LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + + while ($i < $num) + { + $objp = $this->db->fetch_object($resql); + if (! $mode) $key=$objp->id; + else $key=$objp->code; + + $effs[$key] = $objp->libelle!='-'?$objp->libelle:''; + $i++; + } + $this->db->free($resql); + } + return $effs; + } + + + /** + * \brief Affiche formulaire de selection des modes de reglement + * \param page Page + * \param selected Id or code preselected + * \param htmlname Nom du formulaire select + * \param empty Add empty value in list + */ + function form_prospect_level($page, $selected='', $htmlname='prospect_level_id', $empty=0) + { + global $langs; + + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + + print ''; + + print '
'; + } + + + /** + * \brief Retourne la liste deroulante des departements/province/cantons tout pays confondu ou pour un pays donne. + * \remarks Dans le cas d'une liste tout pays confondus, l'affichage fait une rupture sur le pays. + * \remarks La cle de la liste est le code (il peut y avoir plusieurs entree pour + * un code donnee mais dans ce cas, le champ pays differe). + * Ainsi les liens avec les departements se font sur un departement independemment de son nom. + * \param selected code forme juridique a preselectionne + * \param pays_code 0=liste tous pays confondus, sinon code du pays a afficher + */ + function select_departement($selected='',$pays_code=0) + { + global $conf,$langs,$user; + + dol_syslog("Form::select_departement selected=$selected, pays_code=$pays_code",LOG_DEBUG); + + $langs->load("dict"); + + $htmlname='departement_id'; + + // On recherche les d�partements/cantons/province active d'une region et pays actif + $sql = "SELECT d.rowid, d.code_departement as code , d.nom, d.active, p.libelle as libelle_pays, p.code as code_pays FROM"; + $sql .= " ".MAIN_DB_PREFIX ."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r,".MAIN_DB_PREFIX."c_pays as p"; + $sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid"; + $sql .= " AND d.active = 1 AND r.active = 1 AND p.active = 1"; + if ($pays_code) $sql .= " AND p.code = '".$pays_code."'"; + $sql .= " ORDER BY p.code, d.code_departement"; + + dol_syslog("Form::select_departement sql=".$sql); + $result=$this->db->query($sql); + if ($result) + { + print ''; + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Retourne la liste deroulante des regions actives dont le pays est actif + * \remarks La cle de la liste est le code (il peut y avoir plusieurs entree pour + * un code donnee mais dans ce cas, le champ pays et lang differe). + * Ainsi les liens avec les regions se font sur une region independemment + * de son nom. + */ + function select_region($selected='',$htmlname='region_id') + { + global $conf,$langs; + $langs->load("dict"); + + $sql = "SELECT r.rowid, r.code_region as code, r.nom as libelle, r.active, p.code as pays_code, p.libelle as libelle_pays FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p"; + $sql .= " WHERE r.fk_pays=p.rowid AND r.active = 1 and p.active = 1 ORDER BY pays_code, libelle ASC"; + + dol_syslog("Form::select_region sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) + { + print ''; + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Retourne la liste deroulante des civilite actives + * \param selected civilite pre-selectionnee + * \param htmlname Name of HTML select combo field + */ + function select_civilite($selected='',$htmlname='civilite_id') + { + global $conf,$langs,$user; + $langs->load("dict"); + + $sql = "SELECT rowid, code, civilite, active FROM ".MAIN_DB_PREFIX."c_civilite"; + $sql.= " WHERE active = 1"; + + dol_syslog("Form::select_civilite sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) + { + print ''; + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Retourne la liste deroulante des formes juridiques tous pays confondus ou pour un pays donne. + * \remarks Dans le cas d'une liste tous pays confondu, on affiche une rupture sur le pays + * \param selected Code forme juridique a pre-selectionne + * \param pays_code 0=liste tous pays confondus, sinon code du pays a afficher + */ + function select_forme_juridique($selected='',$pays_code=0) + { + global $conf,$langs,$user; + $langs->load("dict"); + + // On recherche les formes juridiques actives des pays actifs + $sql = "SELECT f.rowid, f.code as code , f.libelle as nom, f.active, p.libelle as libelle_pays, p.code as code_pays"; + $sql .= " FROM llx_c_forme_juridique as f, llx_c_pays as p"; + $sql .= " WHERE f.fk_pays=p.rowid"; + $sql .= " AND f.active = 1 AND p.active = 1"; + if ($pays_code) $sql .= " AND p.code = '".$pays_code."'"; + $sql .= " ORDER BY p.code, f.code"; + + dol_syslog("Form::select_forme_juridique sql=".$sql); + $result=$this->db->query($sql); + if ($result) + { + print '
'; + print ''; + if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + print '
'; + } + else + { + dol_print_error($this->db); + } + } + + + /** + * \brief Return list of third parties + * \param object Object we try to find contacts + * \param var_id Name of id field + * \param selected Pre-selected third party + * \param htmlname Name of HTML form + * \param limitto Disable answers that are not id in this array list + */ + function selectCompaniesForNewContact($object, $var_id, $selected='', $htmlname='newcompany', $limitto='') + { + global $conf, $langs; + + // On recherche les societes + $sql = "SELECT s.rowid, s.nom FROM"; + $sql.= " ".MAIN_DB_PREFIX."societe as s"; + if ($selected && $conf->use_javascript_ajax && $conf->global->COMPANY_USE_SEARCH_TO_SELECT) $sql.= " WHERE rowid = ".$selected; + else + { + // For ajax search we limit here. For combo list, we limit later + if ($conf->use_javascript_ajax && $conf->global->COMPANY_USE_SEARCH_TO_SELECT + && is_array($limitto) && sizeof($limitto)) + { + $sql.= " WHERE rowid in (".join(',',$limitto).")"; + } + } + $sql .= " ORDER BY nom ASC"; + + //print $sql; + $resql = $object->db->query($sql); + if ($resql) + { + if ($conf->use_javascript_ajax && $conf->global->COMPANY_USE_SEARCH_TO_SELECT) + { + $socid=0; + if ($selected) + { + $obj = $this->db->fetch_object($resql); + $socid = $obj->rowid?$obj->rowid:''; + } + + // We call a page after a small delay when a new input has been selected + $javaScript = "window.location=\'./contact.php?".$var_id."=".$object->id."&".$htmlname."=\' + document.getElementById(\'".$htmlname."_id\').value;"; + $htmloption = 'onChange="ac_delay(\''.$javaScript.'\',\'500\')"'; + + print "\n".''."\n"; + print ''; + print ''; + print ''; + print '
'; + if ($obj->rowid == 0) + { + //$langs->load("companies"); + //print ''; + print ''; + } + else + { + print ''; + } + print ajax_autocompleter(($socid?$socid:-1),$htmlname,DOL_URL_ROOT.'/societe/ajaxcompanies.php',''); + print ''; + print ajax_indicator($htmlname,'working'); + print '
'; + print "\n"; + return $socid; + } + else + { + $javaScript = "window.location='./contact.php?".$var_id."=".$object->id."&".$htmlname."=' + form.".$htmlname.".options[form.".$htmlname.".selectedIndex].value;"; + print '\n"; + return $firstCompany; + } + } + else + { + dol_print_error($object->db); + } + } + + + /** + * + */ + function selectTypeContact($object, $defValue, $htmlname = 'type', $source, $order='code') + { + $lesTypes = $object->liste_type_contact($source, $order); + print '\n"; + } + + +} + +?> diff --git a/htdocs/fichinter/contact.php b/htdocs/fichinter/contact.php index be3cb3de6dd..3073764165e 100644 --- a/htdocs/fichinter/contact.php +++ b/htdocs/fichinter/contact.php @@ -28,7 +28,7 @@ require("../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/fichinter/class/fichinter.class.php"); require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); require_once(DOL_DOCUMENT_ROOT."/lib/fichinter.lib.php"); -require_once(DOL_DOCUMENT_ROOT.'/html.formcompany.class.php'); +require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); $langs->load("interventions"); $langs->load("sendings"); diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php index b42cd462518..868429e7b03 100644 --- a/htdocs/fourn/commande/contact.php +++ b/htdocs/fourn/commande/contact.php @@ -29,7 +29,7 @@ require("../../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.commande.class.php"); require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); require_once DOL_DOCUMENT_ROOT."/lib/fourn.lib.php"; -require_once(DOL_DOCUMENT_ROOT.'/html.formcompany.class.php'); +require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); $langs->load("facture"); $langs->load("orders"); diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index c3c69d974d0..e2ebc0024b9 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -30,7 +30,7 @@ require_once(DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'); require_once(DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.facture.class.php"); require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); require_once(DOL_DOCUMENT_ROOT.'/lib/fourn.lib.php'); -require_once(DOL_DOCUMENT_ROOT.'/html.formcompany.class.php'); +require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); $langs->load("facture"); $langs->load("companies"); diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index 60d625b465e..f80a6041380 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -1292,7 +1292,7 @@ else // List of actions on element /* - include_once(DOL_DOCUMENT_ROOT.'/html.formactions.class.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); $formactions=new FormActions($db); $somethingshown=$formactions->showactions($fac,'invoice_supplier',$socid); */ diff --git a/htdocs/html.formactions.class.php b/htdocs/html.formactions.class.php index 34880c3e9ec..616063b586d 100644 --- a/htdocs/html.formactions.class.php +++ b/htdocs/html.formactions.class.php @@ -162,7 +162,7 @@ class FormActions global $langs,$user; require_once(DOL_DOCUMENT_ROOT."/comm/action/cactioncomm.class.php"); - require_once(DOL_DOCUMENT_ROOT."/html.form.class.php"); + require_once(DOL_DOCUMENT_ROOT."/core/class/html.form.class.php"); $caction=new CActionComm($this->db); $form=new Form($this->db); diff --git a/htdocs/includes/barcode/html.formbarcode.class.php b/htdocs/includes/barcode/html.formbarcode.class.php index c55e42b0854..8e8fcc106e9 100644 --- a/htdocs/includes/barcode/html.formbarcode.class.php +++ b/htdocs/includes/barcode/html.formbarcode.class.php @@ -20,7 +20,7 @@ */ /** - \file htdocs/html.form.class.php + \file htdocs/core/class/html.form.class.php \brief Fichier de la classe des fonctions pr�d�finie de composants html \version $Revision$ */ diff --git a/htdocs/install/index.php b/htdocs/install/index.php index 0c16cfc9d27..7feb87d104e 100644 --- a/htdocs/install/index.php +++ b/htdocs/install/index.php @@ -25,8 +25,8 @@ * \version $Id$ */ include_once("./inc.php"); -include_once("../html.form.class.php"); -include_once("../html.formadmin.class.php"); +include_once("../core/class/html.form.class.php"); +include_once("../core/class/html.formadmin.class.php"); $err = 0; diff --git a/htdocs/product/traduction.php b/htdocs/product/traduction.php index 330922ec1b2..a259a76d8a3 100644 --- a/htdocs/product/traduction.php +++ b/htdocs/product/traduction.php @@ -30,7 +30,7 @@ require("../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/lib/product.lib.php"); require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php"); require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); -require_once(DOL_DOCUMENT_ROOT."/html.formadmin.class.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formadmin.class.php"); $langs->load("products"); $langs->load("languages"); diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php index 09775c30a5d..2ffbf8f47f5 100644 --- a/htdocs/projet/contact.php +++ b/htdocs/projet/contact.php @@ -27,7 +27,7 @@ require("../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); require_once(DOL_DOCUMENT_ROOT."/lib/project.lib.php"); -require_once(DOL_DOCUMENT_ROOT.'/html.formcompany.class.php'); +require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); $langs->load("projects"); $langs->load("companies"); diff --git a/htdocs/projet/fiche.php b/htdocs/projet/fiche.php index 91d2ed2c234..0dff31db2e2 100644 --- a/htdocs/projet/fiche.php +++ b/htdocs/projet/fiche.php @@ -547,7 +547,7 @@ else print '
'; // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/html.formactions.class.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); $formactions=new FormActions($db); $somethingshown=$formactions->showactions($project,'project',$socid); diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index 4351b28c3bc..33121f9fedd 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -30,7 +30,7 @@ require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); require_once(DOL_DOCUMENT_ROOT."/projet/class/task.class.php"); require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); require_once(DOL_DOCUMENT_ROOT."/lib/project.lib.php"); -require_once(DOL_DOCUMENT_ROOT.'/html.formcompany.class.php'); +require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); $langs->load("projects"); $langs->load("companies"); diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index ec497b07d47..baf3cb88c6d 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -32,7 +32,7 @@ require("../../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php"); require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php"); require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent_options.class.php"); -require_once(DOL_DOCUMENT_ROOT."/html.form.class.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.form.class.php"); // Security check if (empty($conf->adherent->enabled)) accessforbidden('',1,1,1); diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 997dbcd50fb..946c50efa05 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -26,7 +26,7 @@ require("../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php"); require_once(DOL_DOCUMENT_ROOT."/lib/usergroups.lib.php"); -require_once(DOL_DOCUMENT_ROOT."/html.formadmin.class.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formadmin.class.php"); $langs->load("companies"); $langs->load("products");