/** * Format an RDFS Class to an array to be interpreted by the client tree * This is a closed array format. * * @access public * @author Jerome Bogaerts, <*****@*****.**> * @param core_kernel_classes_Class $clazz * @param array $options * @return array */ public function toTree(core_kernel_classes_Class $clazz, array $options = array()) { // show instances yes/no $instances = isset($options['instances']) ? $options['instances'] : true; // cut of the class and only display the children? $chunk = isset($options['chunk']) ? $options['chunk'] : false; // probably which subtrees should be opened $browse = isset($options['browse']) ? $options['browse'] : array(); // limit of instances shown by subclass if no search label is given // if a search string is given, this is the total limit of results, independent of classes $limit = isset($options['limit']) ? $options['limit'] : 0; // offset for limit $offset = isset($options['offset']) ? $options['offset'] : 0; // A unique node URI to be returned from as a tree leaf. $uniqueNode = isset($options['uniqueNode']) ? $options['uniqueNode'] : null; if ($uniqueNode !== null) { $instance = new \core_kernel_classes_Resource($uniqueNode); $results[] = TreeHelper::buildResourceNode($instance, $clazz); $returnValue = $results; } else { // Let's walk the tree with super walker! ~~~ p==[w]õ__ array_walk($browse, function (&$item) { $item = tao_helpers_Uri::decode($item); }); $openNodes = TreeHelper::getNodesToOpen($browse, $clazz); if (!in_array($clazz->getUri(), $openNodes)) { $openNodes[] = $clazz->getUri(); } $factory = new GenerisTreeFactory($instances, $openNodes, $limit, $offset, $browse); $tree = $factory->buildTree($clazz); $returnValue = $chunk ? isset($tree['children']) ? $tree['children'] : array() : $tree; } return $returnValue; }
/** * Builds the content of a class node including it's content * * @param core_kernel_classes_Class $class * * @return array */ private function buildChildNodes(core_kernel_classes_Class $class) { $childs = array(); // subclasses foreach ($class->getSubClasses(false) as $subclass) { $childs[] = $this->classToNode($subclass, $class); } // resources if ($this->showResources) { $limit = $this->limit; if (in_array($class->getUri(), $this->browsableTypes)) { $limit = 0; } $searchResult = $class->searchInstances(array(), array('limit' => $limit, 'offset' => $this->offset, 'recursive' => false, 'order' => RDFS_LABEL)); foreach ($searchResult as $instance) { $childs[] = TreeHelper::buildResourceNode($instance, $class); } } return $childs; }