📄 basic.inc.php
字号:
}
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -