/** * Get children of given object * * @param midgard_object &$object object to get children for * @param boolean $deleted whether to get (only) deleted or not-deleted objects * @return array multidimensional array (keyed by classname) of objects or false on failure */ public static function get_child_objects(&$object, $deleted = false) { // PONDER: Check for some generic user privilege instead ?? if ($deleted && !midcom_connection::is_admin()) { debug_add('Non-admins are not allowed to list deleted objects', MIDCOM_LOG_ERROR); return false; } $resolver = new midcom_helper_reflector_tree($object); $child_classes = $resolver->get_child_classes(); if (!$child_classes) { if ($child_classes === false) { debug_add('resolver returned false (critical failure) from get_child_classes()', MIDCOM_LOG_ERROR); } return false; } //make sure children of the same type come out on top $i = 0; foreach ($child_classes as $child_class) { if (midcom::get('dbfactory')->is_a($object, $child_class)) { unset($child_classes[$i]); array_unshift($child_classes, $child_class); break; } $i++; } $child_objects = array(); foreach ($child_classes as $schema_type) { $type_children = $resolver->_get_child_objects_type($schema_type, $object, $deleted); // PONDER: check for boolean false as result ?? if (empty($type_children)) { unset($type_children); continue; } $child_objects[$schema_type] = $type_children; unset($type_children); } return $child_objects; }