Exemplo n.º 1
0
 /**
  * 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;
 }