diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 431190327da..79fcafbad3a 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1051,8 +1051,9 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) $result = $object->fetch($id); if ($result > 0 && $id > 0) - { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + { + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index b7c0e83904c..46ce0ac7afe 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -35,10 +35,10 @@ $langs->load("orders"); $langs->load("sendings"); $langs->load("companies"); -$id=GETPOST('id', 'int'); -$ref= GETPOST('ref', 'alpha'); -$lineid=GETPOST('lineid', 'int'); -$action=GETPOST('action', 'alpha'); +$id=GETPOST('id','int'); +$ref= GETPOST('ref','alpha'); +$lineid=GETPOST('lineid','int'); +$action=GETPOST('action','alpha'); // Security check if ($user->societe_id) $socid=$user->societe_id; @@ -57,7 +57,8 @@ if ($action == 'addcontact' && $user->rights->propale->creer) if ($result > 0 && $id > 0) { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index eeca19cce3c..9e4cfd2923b 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -54,7 +54,8 @@ if ($action == 'addcontact' && $user->rights->commande->creer) if ($result > 0 && $id > 0) { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 976b62d9fb4..ec39a9b14c8 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -1198,8 +1198,9 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) $result = $object->fetch($id); if ($result > 0 && $id > 0) - { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + { + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 439062a6517..6a280ba068a 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -1513,8 +1513,9 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) $result = $object->fetch($id); if ($result > 0 && $id > 0) - { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + { + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index 59b61483541..d840db56dce 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -55,7 +55,8 @@ if ($action == 'addcontact' && $user->rights->facture->creer) if ($result > 0 && $id > 0) { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/contrat/contact.php b/htdocs/contrat/contact.php index 8482df92fcc..7a35a414481 100644 --- a/htdocs/contrat/contact.php +++ b/htdocs/contrat/contact.php @@ -56,7 +56,8 @@ if ($action == 'addcontact' && $user->rights->contrat->creer) if ($result > 0 && $id > 0) { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php index 2da8fc9083d..3cacf53ee17 100644 --- a/htdocs/contrat/fiche.php +++ b/htdocs/contrat/fiche.php @@ -483,8 +483,9 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) $result = $object->fetch($id); if ($result > 0 && $id > 0) - { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + { + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/core/ajax/contacts.php b/htdocs/core/ajax/contacts.php new file mode 100644 index 00000000000..025d1dc9dd0 --- /dev/null +++ b/htdocs/core/ajax/contacts.php @@ -0,0 +1,58 @@ + + * + * 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, see . + */ + +/** + * \file htdocs/core/ajax/contacts.php + * \brief File to load contacts combobox + */ + +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Disables token renewal +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); +//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); + +require('../../main.inc.php'); + +$id = GETPOST('id','int'); +$action = GETPOST('action','alpha'); +$htmlname = GETPOST('htmlname','alpha'); + +/* + * View + */ + +top_httphead(); + +//print ''."\n"; + +// Load original field value +if (! empty($id) && ! empty($action) && ! empty($htmlname)) +{ + $form = new Form($db); + + $return=array(); + + $return['value'] = $form->selectcontacts($id,'','contactid',0,'','',0,'',true); + $return['num'] = $form->num; + $return['error'] = $form->error; + + echo json_encode($return); +} + +?> diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index e518fab260d..b380b384713 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -42,6 +42,7 @@ class Form { var $db; var $error; + var $num; // Cache arrays var $cache_types_paiements=array(); @@ -785,23 +786,45 @@ class Form } } + /** + * Return list of all contacts (for a third party or all) + * + * @param int $socid Id ot third party or 0 for all + * @param string $selected Id contact pre-selectionne + * @param string $htmlname Name of HTML field ('none' for a not editable field) + * @param int $show_empty 0=no empty value, 1=add an empty value + * @param string $exclude List of contacts id to exclude + * @param string $limitto Disable answers that are not id in this array list + * @param string $showfunction Add function into label + * @param string $moreclass Add more class to class style + * @return int <0 if KO, Nb of contact in list if OK + */ + function select_contacts($socid,$selected='',$htmlname='contactid',$showempty=0,$exclude='',$limitto='',$showfunction=0, $moreclass='') + { + print $this->selectcontacts($socid,$selected,$htmlname,$showempty,$exclude,$limitto,$showfunction, $moreclass); + } /** - * Return list of all contacts (for a third party or all) + * Return list of all contacts (for a third party or all) * - * @param int $socid Id ot third party or 0 for all - * @param string $selected Id contact pre-selectionne - * @param string $htmlname Name of HTML field ('none' for a not editable field) - * @param int $show_empty 0=no empty value, 1=add an empty value - * @param string $exclude List of contacts id to exclude - * @param string $limitto Disable answers that are not id in this array list - * @param string $showfunction Add function into label - * @param string $moreclass Add more class to class style - * @return int <0 if KO, Nb of contact in list if OK + * @param int $socid Id ot third party or 0 for all + * @param string $selected Id contact pre-selectionne + * @param string $htmlname Name of HTML field ('none' for a not editable field) + * @param int $show_empty 0=no empty value, 1=add an empty value + * @param string $exclude List of contacts id to exclude + * @param string $limitto Disable answers that are not id in this array list + * @param string $showfunction Add function into label + * @param string $moreclass Add more class to class style + * @param bool $options_only Return options only (for ajax treatment) + * @return int <0 if KO, Nb of contact in list if OK */ - function select_contacts($socid,$selected='',$htmlname='contactid',$showempty=0,$exclude='',$limitto='',$showfunction=0, $moreclass='') + function selectcontacts($socid,$selected='',$htmlname='contactid',$showempty=0,$exclude='',$limitto='',$showfunction=0, $moreclass='', $options_only=false) { global $conf,$langs; + + $langs->load('companies'); + + $out=''; // On recherche les societes $sql = "SELECT sp.rowid, sp.name as name, sp.firstname, sp.poste"; @@ -815,10 +838,9 @@ class Form if ($resql) { $num=$this->db->num_rows($resql); - $disable=($num==0 ? ' disabled="disabled"' : ''); - if ($htmlname != 'none') print ''; + if ($showempty) $out.= ''; $num = $this->db->num_rows($resql); $i = 0; if ($num) @@ -842,29 +864,29 @@ class Form if (is_array($limitto) && count($limitto) && ! in_array($obj->rowid,$limitto)) $disabled=1; if ($selected && $selected == $obj->rowid) { - print ''; + $out.= ''; } else { - print ''; + $out.= ''; } } else { if ($selected == $obj->rowid) { - print $contactstatic->getFullName($langs); - if ($showfunction && $obj->poste) print ' ('.$obj->poste.')'; + $out.= $contactstatic->getFullName($langs); + if ($showfunction && $obj->poste) $out.= ' ('.$obj->poste.')'; } } $i++; @@ -872,13 +894,15 @@ class Form } else { - print ''; + $out.= ''; } - if ($htmlname != 'none') + if ($htmlname != 'none' || $options_only) { - print ''; + $out.= ''; } - return $num; + + $this->num = $num; + return $out; } else { diff --git a/htdocs/core/lib/ajax.lib.php b/htdocs/core/lib/ajax.lib.php index 2d7426f279e..f433374f83c 100644 --- a/htdocs/core/lib/ajax.lib.php +++ b/htdocs/core/lib/ajax.lib.php @@ -225,14 +225,24 @@ function ajax_combobox($htmlname, $event=array()) var method = obj.method; var url = obj.url; var htmlname = obj.htmlname; - $.get(url, + $.getJSON(url, { action: method, id: id, htmlname: htmlname }, function(response) { - $("select#" + htmlname).html(response); + $.each(obj.params, function(key,action) { + if (key.length) { + var num = response.num; + if (num > 0) { + $("#" + key).removeAttr(action); + } else { + $("#" + key).attr(action, action); + } + } + }); + $("select#" + htmlname).html(response.value); }); } });'; diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index 800ed417988..b1e685104ab 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -54,7 +54,7 @@ $userstatic=new User($db); > trans("Users"); ?> global->MAIN_INFO_SOCIETE_NOM; ?> - select_users($user->id,'contactid',0,$userAlreadySelected); ?> + select_users($user->id,'userid',0,$userAlreadySelected); ?> selectTypeContact($object, '', 'type','internal'); ?> "> @@ -71,17 +71,23 @@ $userstatic=new User($db); > trans("ThirdPartyContacts"); ?> - socid; ?> - selectCompaniesForNewContact($object, 'id', $selectedCompany, 'newcompany'); ?> + socid; ?> + selectCompaniesForNewContact($object, 'id', $selectedCompany, 'newcompany'); ?> + 'getContacts', 'url' => dol_buildpath('/core/ajax/contacts.php',1), 'htmlname' => 'contactid', 'params' => array('add-customer-contact' => 'disabled')); + print $form->select_company($object->socid,'socid','',1,0,0,$events); + ?> - select_contacts($selectedCompany, '', 'contactid'); ?> + select_contacts($selectedCompany, '', 'contactid'); ?> + select_contacts($object->socid, '', 'contactid'); ?> selectTypeContact($object, '', 'type','external'); ?> - "> + "> diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php index efb490a8261..be532b75261 100644 --- a/htdocs/fourn/commande/contact.php +++ b/htdocs/fourn/commande/contact.php @@ -55,7 +55,8 @@ if ($action == 'addcontact' && $user->rights->fournisseur->commande->creer) if ($result > 0 && $id > 0) { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php index bc60fcc1217..18297d7ae0f 100644 --- a/htdocs/fourn/commande/fiche.php +++ b/htdocs/fourn/commande/fiche.php @@ -819,8 +819,9 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) $result = $object->fetch($id); if ($result > 0 && $id > 0) - { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + { + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index 3a863c1d5c5..1a4e97e34f4 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -55,7 +55,8 @@ if ($action == 'addcontact' && $user->rights->fournisseur->facture->creer) if ($result > 0 && $id > 0) { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index b11ac83c102..b09a5107500 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -838,8 +838,9 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) $result = $object->fetch($id); if ($result > 0 && $id > 0) - { - $result = $object->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + { + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0)