function do_managetree() { global $default; // extract. $iFieldsetId = KTUtil::getId($this->oFieldset); $iFieldId = KTUtil::getId($this->oField); $oFieldset =& $this->oFieldset; $oField =& $this->oField; $this->oPage->setBreadcrumbDetails(_kt('edit lookup tree')); $field_id = $iFieldId; $current_node = KTUtil::arrayGet($_REQUEST, 'current_node', 0); $subaction = KTUtil::arrayGet($_REQUEST, 'subaction'); // validate if (empty($field_id)) { return $this->errorRedirectToMain(_kt("Must select a field to edit.")); } $oField =& DocumentField::get($field_id); if (PEAR::isError($oField)) { return $this->errorRedirectToMain(_kt("Invalid field.")); } $aErrorOptions = array('redirect_to' => array('editTree', sprintf('field_id=%d', $field_id))); // under here we do the subaction rendering. // we do this so we don't have to do _very_ strange things with multiple actions. //$default->log->debug("Subaction: " . $subaction); $fieldTree =& new MDTree(); $fieldTree->buildForField($oField->getId()); if ($subaction !== null) { $target = 'managetree'; $msg = _kt('Changes saved.'); if ($subaction === "addCategory") { $new_category = KTUtil::arrayGet($_REQUEST, 'category_name'); if (empty($new_category)) { return $this->errorRedirectTo("managetree", _kt("Must enter a name for the new category."), array("field_id" => $field_id, "fFieldsetId" => $iFieldsetId)); } else { $this->subact_addCategory($field_id, $current_node, $new_category, $fieldTree); } $msg = _kt('Category added') . ': ' . $new_category; } if ($subaction === "deleteCategory") { $this->subact_deleteCategory($fieldTree, $current_node); $current_node = 0; // clear out, and don't try and render the newly deleted category. $msg = _kt('Category removed.'); } if ($subaction === "linkKeywords") { $keywords = KTUtil::arrayGet($_REQUEST, 'keywordsToAdd'); $aErrorOptions['message'] = _kt("No keywords selected"); $this->oValidator->notEmpty($keywords, $aErrorOptions); $this->subact_linkKeywords($fieldTree, $current_node, $keywords); $current_node = 0; // clear out, and don't try and render the newly deleted category. $msg = _kt('Keywords added to category.'); } if ($subaction === "unlinkKeyword") { $keyword = KTUtil::arrayGet($_REQUEST, 'keyword_id'); $this->subact_unlinkKeyword($fieldTree, $keyword); $msg = _kt('Keyword moved to base of tree.'); } // now redirect $query = sprintf('field_id=%d&fFieldsetId=%d', $field_id, $iFieldsetId); return $this->successRedirectTo($target, $msg, $query); } if ($fieldTree->root === null) { return $this->errorRedirectToMain(_kt("Error building tree. Is this a valid tree-lookup field?")); } // FIXME extract this from MDTree (helper method?) $free_metadata = MetaData::getList('document_field_id = ' . $oField->getId() . ' AND (treeorg_parent = 0 OR treeorg_parent IS NULL) AND (disabled = 0)'); // render edit template. $oTemplate = $this->oValidator->validateTemplate("ktcore/metadata/admin/edit_lookuptree"); $renderedTree = $this->_evilTreeRenderer($fieldTree); $this->oPage->setTitle(_kt('Edit Lookup Tree')); if ($current_node == 0) { $category_name = 'Root'; } else { $oNode = MDTreeNode::get($current_node); $category_name = $oNode->getName(); } $aTemplateData = array("context" => $this, "args" => $this->meldPersistQuery("", "managetree", true), "field" => $oField, "oFieldset" => $oFieldset, "tree" => $fieldTree, "renderedTree" => $renderedTree, "currentNode" => $current_node, 'category_name' => $category_name, "freechildren" => $free_metadata); return $oTemplate->render($aTemplateData); }