function keyword_form($keyid = 0) { global $keywords, $nodetypes_select; if ($keyid) { $vals = $keywords->get($keyid); } else { $vals = array('keyid' => 0, 'name' => '', 'parent' => 0, 'relay' => 0, 'weight' => 1, 'nodetype' => 2, 'description' => ''); } $form = new XoopsThemeForm($keyid ? _AM_KEYWORDS_EDIT : _AM_KEYWORDS_NEW, 'KeysForm', 'keywords.php'); $form->addElement(new XoopsFormHidden('keyid', $keyid)); $form->addElement(new XoopsFormText(_AM_KEYWORDS_NAME, 'name', 40, 128, $vals['name'])); $node_select = new XoopsFormRadio(_AM_KEYWORDS_NODETYPE, 'nodetype'); $node_select->addOptionArray($nodetypes_select); $node_select->setValue($vals['nodetype']); $form->addElement($node_select); $parent_keys = new KeyFormSelect(_AM_KEYWORDS_PARENT, 'parent'); $keys = $keywords->getKeys(array(0, 1)); array_unshift($keys, array('keyid' => '', 'name' => _AM_KEY_NONE)); if ($keyid) { unset($keys["key{$keyid}"]); } // remove self $parent_keys->addOptions($keys); $parent_keys->setValue($vals['parent']); $form->addElement($parent_keys); $relay_keys = new KeyFormSelect(_AM_KEYWORDS_RELAY, 'relay'); $relays = $keywords->getKeys(array(0, 2)); array_unshift($relays, array('keyid' => '', 'name' => _AM_KEY_NONE)); $relay_keys->addOptions($relays); $relay_keys->setValue($vals['relay']); $form->addElement($relay_keys); $form->addElement(new XoopsFormText(_AM_SORT_WEIGHT, 'weight', 4, 4, $vals['weight'])); $form->addElement(new XoopsFormDhtmlTextArea(_AM_KEYWORDS_DESC, 'description', $vals['description'])); $form->addElement(new XoopsFormButton('', 'keys', _SUBMIT, 'submit')); $form->display(); }
function keywords_widget(&$ret, &$relays, &$roots) { global $content, $keywords; $keywords = new KeyWords(); $tree = $keywords->getTree(); if (empty($tree)) { return null; } $keys = $content->getKeywords(); $ret = array(); $relays = array(); $all = $keywords->get(); foreach ($all as $key) { if (!empty($key['relay'])) { $root = $key; while ($root['parent']) { $root = $all[$root['parent']]; } $relays[$key['keyid']] = array('keyid' => $key['relay'], 'root' => $root['keyid'], 'values' => array(), 'labels' => array()); } } $roots = array(); foreach ($tree as $key) { // makes toplevel widget $keyid = $key['keyid']; $roots[] = $keyid; $name = "keywords[{$keyid}]"; $words = new KeyFormSelect('', $name); $words->addOption('', _MD_KEY_NONE); $opts = key_expand($key['child']); $words->addOptions($opts); $find = null; foreach ($opts as $opt) { $oid = $opt['keyid']; $check = true; if (empty($oid)) { continue; } foreach (explode(',', $oid) as $id) { if (!in_array($id, $keys)) { $check = false; } $pid = $all[$id]['parent']; if (isset($relays[$pid])) { $relays[$pid]['values'][] = $opt['keyid']; $relays[$pid]['labels'][] = $opt['name']; } } if ($check) { $find = $oid; } } if ($find) { $words->setValue($find); } $words->setExtra('onchange="changeKeyword(this);"'); $ret[$key['keyid']] = $words->render(); } return $ret; }