/**
  * Load tree from a flat, CSV encoded list.
  *
  * This function accepts an array of ASCII encoded lines like:
  * the_alias,gr_grandparent.grandparent.parent
  *
  * @internal
  * @access private
  * @param array The csv data to import
  * @param char  The delimiter separating hierarchy paths
  * @param char  The delimiter separating the node alias from the path.
  * @return cms_tree
  */
 public static function load_from_list($data, $path_delim = '.', $alias_delim = ',')
 {
     $tree = new cms_content_tree();
     $count = 0;
     $nodelist = array();
     if (!is_array($data)) {
         return $count;
     }
     for ($i = 0; $i < count($data); $i++) {
         $line =& $data[$i];
         list($path, $alias) = explode($alias_delim, $line, 2);
         $path_parts = explode($path_delim, $path);
         if (count($path_parts) == 1) {
             if (isset($node_list[$path])) {
                 continue;
             }
             $obj = new cms_content_tree(array('id' => (int) $path_parts[0], 'alias' => $alias));
             $node_list[$path] = $obj;
             $tree->add_node($obj);
         } else {
             $parent = $tree;
             for ($j = 0; $j < count($path_parts); $j++) {
                 $cur_path = implode($path_delim, array_slice($path_parts, 0, $j + 1));
                 if (isset($node_list[$cur_path])) {
                     continue;
                 }
                 $parent_id = (int) $path_parts[$j - 1];
                 $parent = $tree->find_by_tag('id', $parent_id);
                 $obj = new cms_content_tree(array('id' => (int) $path_parts[$j], 'alias' => $alias));
                 $node_list[$cur_path] = $obj;
                 $parent->add_node($obj);
             }
         }
     }
     return $tree;
 }
 /**
  * @ignore
  */
 private function _add_node(\cms_content_tree $node, &$out)
 {
     $rec = array('val' => null, 'label' => null, 'title' => null, 'selected' => FALSE, 'disabled' => FALSE, 'depth' => 0);
     $content = $node->GetContent();
     if (!$content) {
         return;
     }
     $rec['val'] = $content->Id();
     $rec['label'] = $content->Name();
     $rec['title'] = $content->TitleAttribute();
     $rec['depth'] = max(0, $node->get_level() - $this->_start_level);
     if (!$content->HasUsableLink()) {
         // content has no usable link
         if ($this->show_unlinkable) {
             // we still wanna show it, but it cannot be selectable
             $rec['disabled'] = TRUE;
         } else {
             return;
         }
     }
     if (!$content->Active()) {
         // content is not active
         if ($this->show_disabled) {
             // we still wanna show it, but it cannot be selectable
             $rec['disabled'] = TRUE;
         } else {
             return;
         }
     }
     if (!$content->ShowInMenu()) {
         // content is not shown in menu
         if (!$this->show_navhidden) {
             return;
         }
     }
     if ($content->Id() == $this->current) {
         $rec['selected'] = TRUE;
     }
     // done
     $out[] = $rec;
 }
 /**
  * Load content tree from a flat array of hashes (from the database?)
  *
  * This method uses recursion to load the tree.
  *
  * @internal
  * @access private
  * @param array The data to import
  * @param integer (optional) The parent id to load the tree from (default is -1)
  * @param cms_content_tree (optional) The cms_content_tree node to add generated objects to.
  * @return cms_content_tree
  */
 public static function load_from_list($data, $parent_id = -1, cms_content_tree &$tree = null)
 {
     for ($i = 0; $i < count($data); $i++) {
         $row = $data[$i];
         if ($row['parent_id'] < $parent_id) {
             continue;
         }
         if ($row['parent_id'] > $parent_id) {
             break;
         }
         // create a tree object
         if (!is_object($tree)) {
             $tree = new cms_content_tree();
         }
         $node = new cms_content_tree(array('id' => $row['content_id'], 'alias' => $row['content_alias']));
         self::load_from_list($data, $row['content_id'], $node);
         $tree->add_node($node);
     }
     return $tree;
 }