private function _handleImportKbArticle($xml) { static $categoryList = NULL; static $categoryMap = NULL; $title = (string) $xml->title; $created = intval((string) $xml->created_date); $content_b64 = (string) $xml->content; // Bad file if (empty($content_b64) || empty($title)) { return false; } if (NULL == $categoryMap || NULL == $categoryList) { $categoryList = DAO_KbCategory::getWhere(); $categoryMap = DAO_KbCategory::getTreeMap(); } // Handle multiple <categories> elements $categoryIds = array(); foreach ($xml->categories as $eCategories) { $pid = 0; $ptr =& $categoryMap[$pid]; $categoryId = 0; foreach ($eCategories->category as $eCategory) { $catName = (string) $eCategory; // echo "Looking for '", $catName, "' under $pid ...<br>"; if (NULL == ($categoryId = $this->_getCategoryChildByName($categoryList, $ptr, $catName))) { $fields = array(DAO_KbCategory::NAME => $catName, DAO_KbCategory::PARENT_ID => $pid); $categoryId = DAO_KbCategory::create($fields); // echo " - Not found, inserted as $categoryId<br>"; $categoryList[$categoryId] = DAO_KbCategory::get($categoryId); if (!isset($categoryMap[$pid])) { $categoryMap[$pid] = array(); } $categoryMap[$pid][$categoryId] = 0; $categoryMap[$categoryId] = array(); $categoryIds[] = $categoryId; } else { $categoryIds[] = $categoryId; // echo " - Found at $categoryId !<br>"; } $pid = $categoryId; $ptr =& $categoryMap[$categoryId]; } } // Decode content $content = base64_decode($content_b64); // [TODO] Dupe check? (title in category) $fields = array(DAO_KbArticle::TITLE => $title, DAO_KbArticle::UPDATED => $created, DAO_KbArticle::FORMAT => 1, DAO_KbArticle::CONTENT_RAW => $content, DAO_KbArticle::CONTENT => $content, DAO_KbArticle::VIEWS => 0); if (null !== ($articleId = DAO_KbArticle::create($fields))) { DAO_KbArticle::setCategories($articleId, $categoryIds, false); return true; } return false; }
function saveKbCategoryEditPanelAction() { $active_worker = CerberusApplication::getActiveWorker(); if (!$active_worker->hasPriv('core.kb.categories.modify')) { return; } @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string')); @($parent_id = DevblocksPlatform::importGPC($_REQUEST['parent_id'], 'integer', 0)); @($delete = DevblocksPlatform::importGPC($_REQUEST['delete_box'], 'integer', 0)); @($return = DevblocksPlatform::importGPC($_REQUEST['return'])); if (!empty($id) && !empty($delete)) { $ids = DAO_KbCategory::getDescendents($id); DAO_KbCategory::delete($ids); // Change $return to category parent $return = "research/kb/" . sprintf("%06d", $parent_id); } elseif (empty($id)) { // create $fields = array(DAO_KbCategory::NAME => $name, DAO_KbCategory::PARENT_ID => $parent_id); DAO_KbCategory::create($fields); } else { // update $fields = array(DAO_KbCategory::NAME => $name, DAO_KbCategory::PARENT_ID => $parent_id); DAO_KbCategory::update($id, $fields); } if (!empty($return)) { $return_path = explode('/', $return); DevblocksPlatform::redirect(new DevblocksHttpResponse($return_path)); } }