From 9d8036e5a762b7d92da1b1cb0b8448dc29faeb2b Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sat, 18 Apr 2015 03:07:49 +0200 Subject: [PATCH] New : categories as multi-select on product --- htdocs/core/class/html.form.class.php | 10 ++++- htdocs/product/card.php | 60 +++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 63c4c1c8fe9..b03148ffe98 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 = ''; $output.= "\n"; - return $output; + + if ($outputmode) return $outarray; + return $output; } /** diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 102b86299eb..239e351cedb 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 ""; + + // Categories + print ''.$langs->trans("Categories").''; + $cate_arbo = $form->select_all_categories(0, '', 'parent', 64, 0, 1); + print $form->multiselectarray('categories', $cate_arbo, $arrayselected, '', 0, '', 0, 250); + print ""; + print ''; print '
'; @@ -1272,6 +1307,18 @@ else $doleditor->Create(); print ""; + + // Categories + print ''.$langs->trans("Categories").''; + $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 ""; + print ''; print '
'; @@ -1561,6 +1608,19 @@ else print ''.$langs->trans("Note").''.(dol_textishtml($object->note)?$object->note:dol_nl2br($object->note,1,true)).''."\n"; print ' '."\n"; + // Categories + print ''.$langs->trans("Categories").''; + $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('
', $toprint); + print ""; + print "\n"; dol_fiche_end();