/**
  * Prepares setting menu
  * 
  * @param DOMElement $menu 
  */
 protected function getFinalMenuTree($menu)
 {
     $sourceQueue = array($menu);
     $targetQueue = array('root' => $this->root);
     while (count($sourceQueue) > 0) {
         $menu = array_shift($sourceQueue);
         $parent = array_shift($targetQueue);
         if ($mChs = $menu->childNodes) {
             foreach ($mChs as $mCh) {
                 if ($mCh->nodeType != XML_TEXT_NODE) {
                     $node = $this->finalMenuTree->importNode($mCh, $mCh->nodeName != 'item');
                     if (!$node->hasAttribute('order')) {
                         $node->setAttribute('order', 0);
                     }
                     $parent->appendChild($node);
                 }
             }
         }
     }
 }
 /**
  * Load package to package session
  * 
  * @param string $pkgName Valid generated package name.
  * @return Fox_Extensionmanager_Model_Generate_Package 
  */
 public function load($pkgName, $field = NULL)
 {
     $this->getSession()->setFormData(NULL);
     $pkgFile = $this->getGeneratedPkgDir() . DS . $pkgName;
     if (!($pkgName && !is_dir($pkgFile) && file_exists($pkgFile))) {
         throw new Exception("Invalid package.");
         return;
     }
     $info = pathinfo($pkgFile);
     if ($info["extension"] != "xml") {
         throw new Exception("Invalid package file.");
     }
     $doc = new DOMDocument();
     $doc->load($pkgFile);
     if ($doc->documentElement->nodeName != self::PACKAGE_ROOT_ELEMENT) {
         throw new Exception("Invalid package xml.");
     }
     $data = array();
     $nList = $doc->documentElement->childNodes;
     foreach ($nList as $n) {
         if ($n->nodeName == self::PACKAGE_RELEASE_NOTE_ELEMENT) {
             $data["release_note"] = $n->nodeValue;
         } elseif ($n->nodeName == self::PACKAGE_LICENSE_ELEMENT) {
             $data[$n->nodeName] = $n->nodeValue;
             $data["license_url"] = $n->getAttribute("url");
         } elseif ($n->nodeName == self::PACKAGE_PROVIDERS_NOTE_ELEMENT) {
             $data["provider_note"] = $n->nodeValue;
         } elseif ($n->nodeName == self::PACKAGE_PROVIDERS_ELEMENT) {
             $authorList = $n->childNodes;
             foreach ($authorList as $author) {
                 if ($author->nodeName == "#text") {
                     continue;
                 }
                 $infos = $author->childNodes;
                 foreach ($infos as $info) {
                     if ($info->nodeName == "#text") {
                         continue;
                     }
                     $data["providers"][$info->nodeName][] = $info->nodeValue;
                 }
             }
         } elseif ($n->nodeName == self::PACKAGE_CONTENTS_ELEMENT) {
             $destinationList = $n->childNodes;
             $treeDom = new Uni_Data_XDOMDocument();
             $treeDom->loadXML("<root></root>");
             foreach ($destinationList as $destination) {
                 if ($destination->nodeName == "#text") {
                     continue;
                 }
                 $treeDom->documentElement->appendChild($treeDom->importNode($destination, true));
             }
             $data["content_tree_data"] = trim(preg_replace('/<\\?xml.*\\?>/', '', $treeDom->saveXML(), 1));
         } elseif ($n->nodeName == self::PACKAGE_STABILITY_ELEMENT) {
             $stblOp = array_flip(Fox::getModel("extensionmanager/package/state")->_getOptionArray());
             $data[$n->nodeName] = $stblOp[$n->nodeValue];
         } else {
             $data[$n->nodeName] = $n->nodeValue;
         }
     }
     if ($data) {
         $this->setData($data);
         $this->getSession()->setFormData($data);
     }
     return $this;
 }