diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 377922192f2dcb675c75a86b09a9d76053f3be54..8bdb428d26bd5a960b21eda9ed3e94b7113d5e82 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2930,10 +2930,11 @@ class Form * @param string $htmlname HTML field name * @param int $maxlength Maximum length for labels * @param int $excludeafterid Exclude all categories after this leaf in category tree. + * @param int $outputmode 0=HTML select string, 1=Array * @return string * @see select_categories */ - function select_all_categories($type, $selected='', $htmlname="parent", $maxlength=64, $excludeafterid=0) + function select_all_categories($type, $selected='', $htmlname="parent", $maxlength=64, $excludeafterid=0, $outputmode=0) { global $langs; $langs->load("categories"); @@ -2942,6 +2943,7 @@ class Form $cate_arbo = $cat->get_full_arbo($type,$excludeafterid); $output = '<select class="flat" name="'.$htmlname.'">'; + $outarray=array(); if (is_array($cate_arbo)) { if (! count($cate_arbo)) $output.= '<option value="-1" disabled="disabled">'.$langs->trans("NoCategoriesDefined").'</option>'; @@ -2959,12 +2961,16 @@ class Form $add = ''; } $output.= '<option '.$add.'value="'.$cate_arbo[$key]['id'].'">'.dol_trunc($cate_arbo[$key]['fulllabel'],$maxlength,'middle').'</option>'; + + $outarray[$cate_arbo[$key]['id']] = $cate_arbo[$key]['fulllabel']; } } } $output.= '</select>'; $output.= "\n"; - return $output; + + if ($outputmode) return $outarray; + return $output; } /** diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 102b86299eb554bb8408c7e0cadc1981a85e13ad..239e351cedb4545218d3e60458da427af53c1f37 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -40,6 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/genericobject.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; @@ -271,6 +272,16 @@ if (empty($reshook)) if ($id > 0) { + // Category association + $categories = GETPOST('categories'); + if(!empty($categories)) { + $cat = new Categorie($db); + foreach($categories as $id_category) { + $cat->fetch($id_category); + $cat->add_type($object, 'product'); + } + } + header("Location: ".$_SERVER['PHP_SELF']."?id=".$id); exit; } @@ -349,6 +360,23 @@ if (empty($reshook)) { if ($object->update($object->id, $user) > 0) { + // Category association + // First we delete all categories association + $sql = "DELETE FROM ".MAIN_DB_PREFIX."categorie_product"; + $sql .= " WHERE fk_product = ".$object->id; + $db->query($sql); + + // Then we add the associated categories + $categories = GETPOST('categories'); + if(!empty($categories)) { + $cat = new Categorie($db); + + foreach($categories as $id_category) { + $cat->fetch($id_category); + $cat->add_type($object, 'product'); + } + } + $action = 'view'; } else @@ -1003,6 +1031,13 @@ else $doleditor->Create(); print "</td></tr>"; + + // Categories + print '<tr><td valign="top">'.$langs->trans("Categories").'</td><td colspan="3">'; + $cate_arbo = $form->select_all_categories(0, '', 'parent', 64, 0, 1); + print $form->multiselectarray('categories', $cate_arbo, $arrayselected, '', 0, '', 0, 250); + print "</td></tr>"; + print '</table>'; print '<br>'; @@ -1272,6 +1307,18 @@ else $doleditor->Create(); print "</td></tr>"; + + // Categories + print '<tr><td valign="top">'.$langs->trans("Categories").'</td><td colspan="3">'; + $cate_arbo = $form->select_all_categories(0, '', 'parent', 64, 0, 1); + $c = new Categorie($db); + $cats = $c->containing($object->id,0); + foreach($cats as $cat) { + $arrayselected[] = $cat->id; + } + print $form->multiselectarray('categories', $cate_arbo, $arrayselected, '', 0, '', 0, 250); + print "</td></tr>"; + print '</table>'; print '<br>'; @@ -1561,6 +1608,19 @@ else print '<tr><td valign="top">'.$langs->trans("Note").'</td><td colspan="'.(2+(($showphoto||$showbarcode)?1:0)).'">'.(dol_textishtml($object->note)?$object->note:dol_nl2br($object->note,1,true)).'</td></tr>'."\n"; print '<!-- End show Note --> '."\n"; + // Categories + print '<tr><td valign="top">'.$langs->trans("Categories").'</td><td colspan="3">'; + $cat = new Categorie($db); + $categories = $cat->containing($object->id,0); + $catarray = $form->select_all_categories(0, '', 'parent', 64, 0, 1); + + $toprint = array(); + foreach($categories as $c) { + $toprint[] = $catarray[$c->id]; + } + print implode('<br>', $toprint); + print "</td></tr>"; + print "</table>\n"; dol_fiche_end();