/** * Statically callable method to determine if given object has children * * @param midgard_object &$object object to get children for * @param boolean $deleted whether to count (only) deleted or not-deleted objects * @return array multidimensional array (keyed by classname) of objects or false on failure */ function has_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) { debug_add('resolver returned false (critical failure) from get_child_classes()', MIDCOM_LOG_ERROR); return false; } foreach ($child_classes as $schema_type) { $qb = $resolver->_child_objects_type_qb($schema_type, $object, $deleted); if (!$qb) { debug_add('resolver returned false (critical failure) from _child_objects_type_qb()', MIDCOM_LOG_ERROR); return false; } $qb->set_limit(1); if ($qb->count()) { unset($child_classes, $schema_type, $qb, $resolver); return true; } } unset($child_classes, $schema_type, $qb, $resolver); return false; }