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();
}
Example #2
0
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;
}