示例#1
0
 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);
 }