basic.inc.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 869 行 · 第 1/3 页

SVN-BASE
869
字号
        }        foreach ($_REQUEST['metadata'] as $iMetaDataId) {            $oMetaData =& MetaData::get($iMetaDataId);            if (PEAR::isError($oMetaData)) {                $this->errorRedirectTo('managelookups', _kt('Invalid lookups selected'));            }            $bStuck = (boolean)$oMetaData->getIsStuck();            $oMetaData->setIsStuck(!$bStuck);            $oMetaData->update();        }        $this->successRedirectTo('managelookups', _kt('Lookup stickiness toggled'));        exit(0);    }    // }}}// {{{ TREE    // create and display the tree editing form.    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);    }    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);        if (PEAR::isError($oKW)) {            return true;        }        $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)    {        // deliver us from evil....        $iFieldId = $treeToRender->field_id;        $oField = DocumentField::get($iFieldId);        $iFieldsetId = $oField->getParentFieldsetId();        $treeStr = "<ul>";        foreach ($treeToRender->contents[$subnode] as $subnode_id => $subnode_val)        {            if ($subnode_id !== "leaves") {                $treeStr .= '<li class="treenode active"><a class="pathnode inactive"  onclick="toggleElementClass(\'active\', this.parentNode); toggleElementClass(\'inactive\', this.parentNode);">' . $treeToRender->mapnodes[$subnode_val]->getName() . '</a>';                $treeStr .= $this->_evilActionHelper($iFieldsetId, $iFieldId, false, $subnode_val);                $treeStr .= $this->_evilTreeRecursion($subnode_val, $treeToRender);                $treeStr .= '</li>';            }            else            {                foreach ($subnode_val as $leaf)                {                    $treeStr .= '<li class="leafnode">' . $treeToRender->lookups[$leaf]->getName();                    $treeStr .= $this->_evilActionHelper($iFieldsetId, $iFieldId, true, $leaf);                    $treeStr .=  '</li>';            }                }        }        $treeStr .= '</ul>';        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 = "<!-- this is rendered with an unholy hack. sorry. -->";        $stack = array();        $exitstack = array();        // since the root is virtual, we need to fake it here.        // the inner section is generised.        $treeStr .= '<ul class="kt_treenodes"><li class="treenode active"><a class="pathnode"  onclick="toggleElementClass(\'active\', this.parentNode);toggleElementClass(\'inactive\', this.parentNode);">' . _kt('Root') . '</a>';        $treeStr .= ' (<a href="' . KTUtil::addQueryStringSelf($this->meldPersistQuery('current_node=0', 'managetree')) . '">' . _kt('attach keywords') . '</a>)';        $treeStr .= '<ul>';        //$default->log->debug("EVILRENDER: " . print_r($treeToRender, true));        foreach ($treeToRender->getRoot() as $node_id => $subtree_nodes)        {            //$default->log->debug("EVILRENDER: ".$node_id." => ".$subtree_nodes." (".($node_id === "leaves").")");            // leaves are handled differently.            if ($node_id !== "leaves") {                // $default->log->debug("EVILRENDER: " . print_r($subtree_nodes, true));                $treeStr .= '<li class="treenode active"><a class="pathnode" onclick="toggleElementClass(\'active\', this.parentNode);toggleElementClass(\'inactive\', this.parentNode);">' . $treeToRender->mapnodes[$subtree_nodes]->getName() . '</a>';                $treeStr .= $this->_evilActionHelper($iFieldsetId, $iFieldId, false, $subtree_nodes);                $treeStr .= $this->_evilTreeRecursion($subtree_nodes, $treeToRender);                $treeStr .= '</li>';            }            else            {                foreach ($subtree_nodes as $leaf)                {                    $treeStr .= '<li class="leafnode">' . $treeToRender->lookups[$leaf]->getName();                    $treeStr .= $this->_evilActionHelper($iFieldsetId, $iFieldId, true, $leaf);                    $treeStr .=  '</li>';                }            }        }        $treeStr .= '</ul></li>';        $treeStr .= '</ul>';        return $treeStr;    }    // BS: don't hate me.    // BD: sorry. I hate you.    function _evilActionHelper($iFieldsetId, $iFieldId, $bIsKeyword, $current_node) {        $actionStr = " (";        if ($bIsKeyword === true) {           $actionStr .= '<a href="' . KTUtil::addQueryStringSelf(KTUtil::addQueryStringSelf($this->meldPersistQuery('keyword_id='.$current_node.'&subaction=unlinkKeyword', 'managetree'))) . '">' . _kt('unlink') . '</a>';        } else {           $actionStr .= '<a href="' . KTUtil::addQueryStringSelf($this->meldPersistQuery('current_node=' . $current_node, 'managetree')) .'">' . _kt('attach keywords') . '</a> ';           $actionStr .= '| <a href="' . KTUtil::addQueryStringSelf($this->meldPersistQuery('current_node='.$current_node.'&subaction=deleteCategory', 'managetree')) . '">' . _kt('delete') . '</a>';        }        $actionStr .= ")";        return $actionStr;    }    function do_deletefield() {        $res = $this->oField->delete();        if (PEAR::isError($res)) {            $this->errorRedirectToParent(sprintf(_kt("Unable to delete field: %s"), $res->getMessage()));        }        $this->successRedirectToParent(_kt("Field deleted."));    }    /**     * Move field up in the order     */    function do_orderUp() {        $iId = $this->oField->getID();        $iFieldsetId = $this->oField->getParentFieldsetId();        $res = $this->oField->movePosition($iFieldsetId, $iId, 'up');        if ($res === false) {            $this->errorRedirectToParent(_kt("Unable to move field up"));        }        $this->successRedirectToParent(_kt("Field moved up."));    }    /**     * Move field down in the order     */    function do_orderDown() {        $iId = $this->oField->getID();        $iFieldsetId = $this->oField->getParentFieldsetId();        $res = $this->oField->movePosition($iFieldsetId, $iId, 'down');        if ($res === false) {            $this->errorRedirectToParent(_kt("Unable to move field down"));        }        $this->successRedirectToParent(_kt("Field moved down."));    }}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?