/** * Helper to make an array usable with DM2 select datatype for selecting product groups * * @param mixed $up Either the ID or GUID of the product group * @param string $prefix Prefix for the code * @param string $keyproperty Property to use as the key of the resulting array * @param array $label_fields Object properties to show in the label (will be shown space separated) * @return array */ public static function list_groups($up = 0, $prefix = '', $keyproperty = 'id', $order_by_score = false, $label_fields = array('code', 'title')) { static $result_cache = array(); $cache_key = md5($up . $keyproperty . $prefix . $order_by_score . implode('', $label_fields)); if (isset($result_cache[$cache_key])) { return $result_cache[$cache_key]; } $result_cache[$cache_key] = array(); $ret =& $result_cache[$cache_key]; if (empty($up)) { // TODO: use reflection to see what kind of property this is ? if ($keyproperty == 'id') { $ret[0] = midcom::get('i18n')->get_string('toplevel', 'org.openpsa.products'); } else { $ret[''] = midcom::get('i18n')->get_string('toplevel', 'org.openpsa.products'); } } if (mgd_is_guid($up)) { $group = new org_openpsa_products_product_group_dba($up); $up = $group->id; } $mc = org_openpsa_products_product_group_dba::new_collector('up', (int) $up); $mc->add_value_property('title'); $mc->add_value_property('code'); $mc->add_value_property('id'); if ($keyproperty !== 'id') { $mc->add_value_property($keyproperty); } foreach ($label_fields as $fieldname) { if ($fieldname == 'id' || $fieldname == $keyproperty) { continue; } $mc->add_value_property($fieldname); } unset($fieldname); // Order by score if required if ($order_by_score) { $mc->add_order('metadata.score', 'DESC'); } $mc->add_order('code'); $mc->add_order('title'); $mc->execute(); $mc_keys = $mc->list_keys(); foreach ($mc_keys as $mc_key => $dummy) { $id = $mc->get_subkey($mc_key, 'id'); $key = $mc->get_subkey($mc_key, $keyproperty); $ret[$key] = $prefix; foreach ($label_fields as $fieldname) { $field_val = $mc->get_subkey($mc_key, $fieldname); $ret[$key] .= "{$field_val} "; } unset($fieldname, $field_val); $ret = $ret + org_openpsa_products_product_group_dba::list_groups($id, "{$prefix} > ", $keyproperty, $label_fields); unset($id, $key); } unset($mc, $mc_keys, $dummy, $mc_key); return $ret; }