/** * Remove um no da lista * * @author Hugo Ferreira da Silva * @param Lumine_Tree_Node $node * @return void */ public function remove(Lumine_Tree_Node $node) { $newList = array(); foreach ($this->nodeList as $key => $currNode) { if ($node != $currNode) { $newList[] = $currNode; } else { $node->setNodeList(null); } } $this->nodeList = $newList; }
/** * Atribui os ouvintes de evento * * @author Hugo Ferreira da Silva * @param Lumine_Tree_Node $node * @return void */ protected function setEventListeners(Lumine_Tree_Node $node) { $node->addEventListener(Lumine_Tree_Event::PRE_NODE_ADD, array($this, 'redispatchEvent')); $node->addEventListener(Lumine_Tree_Event::PRE_NODE_REMOVE, array($this, 'redispatchEvent')); $node->addEventListener(Lumine_Tree_Event::PRE_NODE_SAVE, array($this, 'redispatchEvent')); $node->addEventListener(Lumine_Tree_Event::PRE_NODE_DELETE, array($this, 'redispatchEvent')); $node->addEventListener(Lumine_Tree_Event::POS_NODE_ADD, array($this, 'redispatchEvent')); $node->addEventListener(Lumine_Tree_Event::POS_NODE_REMOVE, array($this, 'redispatchEvent')); $node->addEventListener(Lumine_Tree_Event::POS_NODE_SAVE, array($this, 'redispatchEvent')); $node->addEventListener(Lumine_Tree_Event::POS_NODE_DELETE, array($this, 'redispatchEvent')); }
/** * Recupera os nos filhos de uma arvore * * Efetua a consulta uma unica vez. * Depois que os nos filhos estao populados, sempre * utiliza os nos encontrados * * @author Hugo Ferreira da Silva * @param boolean $loadSubChilds Indica se os filhos deverao carregar seus sub-filhos * @return Lumine_Tree_NodeList */ public function getChildNodes($loadSubChilds = false) { // se ainda nao buscou os nos filhos if (is_null($this->childNodes)) { // cria um node list $this->childNodes = new Lumine_Tree_NodeList(); // pega o codigo deste objeto $code = $this->obj->{$this->fieldId}; // se tiver um codigo if (!is_null($code)) { // inicia a reflexao $ref = new ReflectionClass($this->obj->metadata()->getClassname()); // recupera uma nova instancia $inst = $ref->newInstance(); // consulta os filhos $inst->where('{' . $this->fieldParentId . '} = ?', $code)->find(); // para cada filho encontrado while ($inst->fetch()) { // cria uma nova instancia $temp = $ref->newInstanceArgs(); // popula com os dados encontrados $temp->populateFrom($inst->toArray()); // cria um no $node = new Lumine_Tree_Node($temp, $this->fieldId, $this->fieldParentId); // informa que este objeto eh o parentNode $node->parentNode = $this; if (!is_null($this->getTree())) { // informa a arvore $node->setTree($this->getTree()); } if ($loadSubChilds) { $node->getChildNodes($loadSubChilds); } // coloca na lista $this->childNodes->add($node); } // destroi o objetode consulta $inst->destroy(); } } // retorna os nos filhos return $this->childNodes; }