From 26e9877a353ba216bdc92b4988380d8bded464e1 Mon Sep 17 00:00:00 2001 From: Neil Blakey-Milner Date: Thu, 15 Dec 2005 13:34:38 +0000 Subject: [PATCH] Integrate Manage Lookup Trees into document field management. --- plugins/ktcore/admin/documentFields.php | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins/ktcore/admin/manageLookupTrees.php | 246 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ templates/ktcore/metadata/editField.smarty | 2 +- 3 files changed, 201 insertions(+), 247 deletions(-) delete mode 100755 plugins/ktcore/admin/manageLookupTrees.php diff --git a/plugins/ktcore/admin/documentFields.php b/plugins/ktcore/admin/documentFields.php index 2a74dbe..9621c30 100755 --- a/plugins/ktcore/admin/documentFields.php +++ b/plugins/ktcore/admin/documentFields.php @@ -537,6 +537,206 @@ class KTDocumentFieldDispatcher extends KTStandardDispatcher { $this->successRedirectToMain(_('Fieldset deleted')); } // }}} + + +// {{{ TREE + // create and display the tree editing form. + function do_editTree() { + global $default; + // extract. + $field_id = KTUtil::arrayGet($_REQUEST, 'field_id'); + $current_node = KTUtil::arrayGet($_REQUEST, 'current_node', 0); + $subaction = KTUtil::arrayGet($_REQUEST, 'subaction'); + + // validate + if (empty($field_id)) { return $this->errorRedirectToMain(_("Must select a field to edit.")); } + $oField =& DocumentField::get($field_id); + if (PEAR::isError($oField)) { return $this->errorRedirectToMain(_("Invalid field.")); } + + // 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 = 'editTree'; + $msg = _('Changes saved.'); + if ($subaction === "addCategory") { + $new_category = KTUtil::arrayGet($_REQUEST, 'category_name'); + if (empty($new_category)) { return $this->errorRedirectTo("editTree", _("Must enter a name for the new category."), array("field_id" => $field_id)); } + else { $this->subact_addCategory($field_id, $current_node, $new_category, $fieldTree);} + $msg = _('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 = _('Category removed.'); + } + if ($subaction === "linkKeywords") { + $keywords = KTUtil::arrayGet($_REQUEST, 'keywordsToAdd'); + $this->subact_linkKeywords($fieldTree, $current_node, $keywords); + $current_node = 0; // clear out, and don't try and render the newly deleted category. + $msg = _('Keywords added to category.'); + } + if ($subaction === "unlinkKeyword") { + $keyword = KTUtil::arrayGet($_REQUEST, 'keyword_id'); + $this->subact_unlinkKeyword($fieldTree, $keyword); + $msg = _('Keyword moved to base of tree.'); + } + // now redirect + $query = 'field_id=' . $field_id; + return $this->successRedirectTo($target, $msg, $query); + } + + if ($fieldTree->root === null) { + return $this->errorRedirectToMain(_("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)'); + + // render edit template. + $oTemplating = new KTTemplating; + $oTemplate = $oTemplating->loadTemplate("ktcore/edit_lookuptrees"); + $renderedTree = $this->_evilTreeRenderer($fieldTree); + + $this->oPage->setTitle(_('Edit Lookup Tree')); + + //$this->oPage->requireJSResource('thirdparty/js/MochiKit/Base.js'); + + $aTemplateData = array( + "field" => $oField, + "tree" => $fieldTree, + "renderedTree" => $renderedTree, + "currentNode" => $current_node, + "freechildren" => $free_metadata, + "context" => $this, + ); + return $oTemplate->render($aTemplateData); + } + + function subact_addCategory($field_id, $current_node, $new_category, &$constructedTree) { + $newCategory = MDTreeNode::createFromArray(array ( + "iFieldId" => $field_id, + "sName" => $new_category, + "iParentNode" => $current_node, + )); + if (PEAR::isError($newCategory)) + { + return false; + } + $constructedTree->addNode($newCategory); + return true; + } + + function subact_deleteCategory(&$constructedTree, $current_node) { + $constructedTree->deleteNode($current_node); + return true; + } + + function subact_unlinkKeyword(&$constructedTree, $keyword) { + $oKW = MetaData::get($keyword); + $constructedTree->reparentKeyword($oKW->getId(), 0); + return true; + } + + + function subact_linkKeywords(&$constructedTree, $current_node, $keywords) { + foreach ($keywords as $md_id) + { + $constructedTree->reparentKeyword($md_id, $current_node); + } + return true; + } + + /* ----------------------- EVIL HACK -------------------------- + * + * This whole thing needs to replaced, as soon as I work out how + * to non-sucking Smarty recursion. + */ + + function _evilTreeRecursion($subnode, $treeToRender) + { + $treeStr = "'; + return $treeStr; + + } + + // I can't seem to do recursion in smarty, and recursive templates seems a bad solution. + // Come up with a better way to do this (? NBM) + function _evilTreeRenderer($treeToRender) { + //global $default; + $treeStr = ""; + $stack = array(); + $exitstack = array(); + + // since the root is virtual, we need to fake it here. + // the inner section is generised. + $treeStr .= ''; + + return $treeStr; + } + + // don't hate me. + function _evilActionHelper($iFieldId, $bIsKeyword, $current_node) { + $actionStr = " ("; + if ($bIsKeyword === true) { + $actionStr .= 'unlink'; + } + else + { + $actionStr .= 'add items '; + $actionStr .= '| delete'; + } + $actionStr .= ")"; + return $actionStr; + } +// }}} } ?> diff --git a/plugins/ktcore/admin/manageLookupTrees.php b/plugins/ktcore/admin/manageLookupTrees.php deleted file mode 100755 index 9317c66..0000000 --- a/plugins/ktcore/admin/manageLookupTrees.php +++ /dev/null @@ -1,246 +0,0 @@ -loadTemplate("ktcore/manage_lookuptrees"); - $aTemplateData = array( - "treefields" => $aTreeFields, - "lookupfields" => $aLookupFields, - ); - return $oTemplate->render($aTemplateData); - } - - function do_createTree() { - // extract. - $field_id = KTUtil::arrayGet($_REQUEST, 'field_id'); - - // validate - if (empty($field_id)) { return $this->errorRedirectToMain(_("Must select a field to convert.")); } - $oField =& DocumentField::get($field_id); - if (PEAR::isError($oField)) { return $this->errorRedirectToMain(_("Invalid field.")); } - - // set as a metadata tree. - $oField->setHasLookupTree(1); - $oField->update(); - $this->errorRedirectToMain(sprintf(_("Converted %s to a tree."), $oField->getName())); - } - - - // create and display the tree editing form. - function do_editTree() { - global $default; - // extract. - $field_id = KTUtil::arrayGet($_REQUEST, 'field_id'); - $current_node = KTUtil::arrayGet($_REQUEST, 'current_node', 0); - $subaction = KTUtil::arrayGet($_REQUEST, 'subaction'); - - // validate - if (empty($field_id)) { return $this->errorRedirectToMain(_("Must select a field to edit.")); } - $oField =& DocumentField::get($field_id); - if (PEAR::isError($oField)) { return $this->errorRedirectToMain(_("Invalid field.")); } - - // 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 = 'editTree'; - $msg = _('Changes saved.'); - if ($subaction === "addCategory") { - $new_category = KTUtil::arrayGet($_REQUEST, 'category_name'); - if (empty($new_category)) { return $this->errorRedirectTo("editTree", _("Must enter a name for the new category."), array("field_id" => $field_id)); } - else { $this->subact_addCategory($field_id, $current_node, $new_category, $fieldTree);} - $msg = _('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 = _('Category removed.'); - } - if ($subaction === "linkKeywords") { - $keywords = KTUtil::arrayGet($_REQUEST, 'keywordsToAdd'); - $this->subact_linkKeywords($fieldTree, $current_node, $keywords); - $current_node = 0; // clear out, and don't try and render the newly deleted category. - $msg = _('Keywords added to category.'); - } - if ($subaction === "unlinkKeyword") { - $keyword = KTUtil::arrayGet($_REQUEST, 'keyword_id'); - $this->subact_unlinkKeyword($fieldTree, $keyword); - $msg = _('Keyword moved to base of tree.'); - } - // now redirect - $query = 'field_id=' . $field_id; - return $this->successRedirectTo($target, $msg, $query); - } - - if ($fieldTree->root === null) { - return $this->errorRedirectToMain(_("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)'); - - // render edit template. - $oTemplating = new KTTemplating; - $oTemplate = $oTemplating->loadTemplate("ktcore/edit_lookuptrees"); - $renderedTree = $this->_evilTreeRenderer($fieldTree); - - $this->oPage->setTitle(_('Edit Lookup Tree')); - - //$this->oPage->requireJSResource('thirdparty/js/MochiKit/Base.js'); - - $aTemplateData = array( - "field" => $oField, - "tree" => $fieldTree, - "renderedTree" => $renderedTree, - "currentNode" => $current_node, - "freechildren" => $free_metadata, - "context" => $this, - ); - return $oTemplate->render($aTemplateData); - } - - function subact_addCategory($field_id, $current_node, $new_category, &$constructedTree) { - $newCategory = MDTreeNode::createFromArray(array ( - "iFieldId" => $field_id, - "sName" => $new_category, - "iParentNode" => $current_node, - )); - if (PEAR::isError($newCategory)) - { - return false; - } - $constructedTree->addNode($newCategory); - return true; - } - - function subact_deleteCategory(&$constructedTree, $current_node) { - $constructedTree->deleteNode($current_node); - return true; - } - - function subact_unlinkKeyword(&$constructedTree, $keyword) { - $oKW = MetaData::get($keyword); - $constructedTree->reparentKeyword($oKW->getId(), 0); - return true; - } - - - function subact_linkKeywords(&$constructedTree, $current_node, $keywords) { - foreach ($keywords as $md_id) - { - $constructedTree->reparentKeyword($md_id, $current_node); - } - return true; - } - - /* ----------------------- EVIL HACK -------------------------- - * - * This whole thing needs to replaced, as soon as I work out how - * to non-sucking Smarty recursion. - */ - - function _evilTreeRecursion($subnode, $treeToRender) - { - $treeStr = "'; - return $treeStr; - - } - - // I can't seem to do recursion in smarty, and recursive templates seems a bad solution. - // Come up with a better way to do this (? NBM) - function _evilTreeRenderer($treeToRender) { - //global $default; - $treeStr = ""; - $stack = array(); - $exitstack = array(); - - // since the root is virtual, we need to fake it here. - // the inner section is generised. - $treeStr .= ''; - - return $treeStr; - } - - // don't hate me. - function _evilActionHelper($iFieldId, $bIsKeyword, $current_node) { - $actionStr = " ("; - if ($bIsKeyword === true) { - $actionStr .= 'unlink'; - } - else - { - $actionStr .= 'add items '; - $actionStr .= '| delete'; - } - $actionStr .= ")"; - return $actionStr; - } - -} - -$oDispatcher = new ManageLookupTreeDispatcher(); -$oDispatcher->dispatch(); - -?> diff --git a/templates/ktcore/metadata/editField.smarty b/templates/ktcore/metadata/editField.smarty index 97e618c..9b047be 100644 --- a/templates/ktcore/metadata/editField.smarty +++ b/templates/ktcore/metadata/editField.smarty @@ -52,7 +52,7 @@ {if $oField->getHasLookup() and $oField->getHasLookupTree()} {assign var=iFieldId value=$oField->getId()} {i18n}Manage +href="?action=editTree&field_id={$iFieldId}">{i18n}Manage lookup tree{/i18n} {/if} -- libgit2 0.21.4